Add viewTransform transformation

This commit is contained in:
Godzil
2020-02-20 15:11:40 +00:00
parent 863bb2a34b
commit bc047cd89e
3 changed files with 74 additions and 1 deletions

View File

@@ -21,4 +21,6 @@ Matrix rotationZ(double angle);
Matrix shearing(double Xy, double Xx, double Yx, double Yz, double Zx, double Zy);
Matrix viewTransform(Tuple from, Tuple to, Tuple up);
#endif /* DORAYME_TRANSFORMATION_H */

View File

@@ -81,4 +81,19 @@ Matrix shearing(double Xy, double Xz, double Yx, double Yz, double Zx, double Zy
ret.set(2, 1, Zy);
return ret;
}
Matrix viewTransform(Tuple from, Tuple to, Tuple up)
{
Tuple forward = (to - from).normalise();
Tuple left = forward.cross(up.normalise());
Tuple true_up = left.cross(forward);
double orientationValues[] = { left.x, left.y, left.z, 0,
true_up.x, true_up.y, true_up.z, 0,
-forward.x, -forward.y, -forward.z, 0,
0, 0, 0, 1 };
Matrix orientation = Matrix4(orientationValues);
return orientation * translation(-from.x, -from.y, -from.z);
}