Vector3 Camera::project(const Vector4 &p) const
{
Vector4 r = proj_matrix*(view_matrix*p);
- return Vector3(r)/r.w;
+ return r.slice<3>(0)/r.w;
}
Vector3 Camera::project(const Vector3 &p) const
{
Vector3 right_dir = normalize(cross(look_dir, up_dir));
Vector4 columns[4];
- columns[0] = Vector4(right_dir, 0.0f);
- columns[1] = Vector4(cross(right_dir, look_dir), 0.0f);
- columns[2] = Vector4(-look_dir, 0.0f);
- columns[3] = Vector4(position, 1.0f);
+ columns[0] = compose(right_dir, 0.0f);
+ columns[1] = compose(cross(right_dir, look_dir), 0.0f);
+ columns[2] = compose(-look_dir, 0.0f);
+ columns[3] = compose(position, 1.0f);
object_matrix = Matrix::from_columns(columns);
view_matrix = invert(object_matrix);
}