added operator*(Vector,double) and operator/(Vector,double) to util/Vector; added lookAt() to util/Transform (needs testing)
git-svn-id: svn://anubis/fart/trunk@63 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
9041ec6a1c
commit
866f22a637
@ -13,6 +13,29 @@ Transform Transform::getInverse()
|
||||
return inv;
|
||||
}
|
||||
|
||||
void Transform::lookAt(const Vector & eye,
|
||||
const Vector & focus,
|
||||
const Vector & up)
|
||||
{
|
||||
Vector forward = focus - eye;
|
||||
forward.normalize();
|
||||
Vector up_projected_onto_forward = forward * (up % forward) / up.mag2();
|
||||
Vector perpendicular_up = (up - up_projected_onto_forward).normalize();
|
||||
Vector right = forward * perpendicular_up;
|
||||
Matrix mult;
|
||||
mult[0][0] = right[0];
|
||||
mult[0][1] = right[1];
|
||||
mult[0][2] = right[2];
|
||||
mult[1][0] = forward[0];
|
||||
mult[1][1] = forward[1];
|
||||
mult[1][2] = forward[2];
|
||||
mult[2][0] = perpendicular_up[0];
|
||||
mult[2][1] = perpendicular_up[1];
|
||||
mult[2][2] = perpendicular_up[2];
|
||||
m_matrix *= mult;
|
||||
translate(-eye[0], -eye[1], -eye[2]);
|
||||
}
|
||||
|
||||
void Transform::translate(double x, double y, double z)
|
||||
{
|
||||
Matrix t = Matrix::identity();
|
||||
|
@ -12,6 +12,9 @@ class Transform
|
||||
public:
|
||||
Transform();
|
||||
Transform getInverse();
|
||||
void lookAt(const Vector & eye,
|
||||
const Vector & focus,
|
||||
const Vector & up);
|
||||
void translate(double x, double y, double z);
|
||||
void rotate(double angle, double xv, double yv, double zv);
|
||||
void scale(double xs, double ys, double zs);
|
||||
|
@ -79,3 +79,21 @@ Vector operator-(const Vector & v1, const Vector & v2)
|
||||
result[2] = v1[2] - v2[2];
|
||||
return result;
|
||||
}
|
||||
|
||||
Vector operator*(const Vector & v1, double scale)
|
||||
{
|
||||
Vector result = v1;
|
||||
result[0] *= scale;
|
||||
result[1] *= scale;
|
||||
result[2] *= scale;
|
||||
return result;
|
||||
}
|
||||
|
||||
Vector operator/(const Vector & v1, double scale)
|
||||
{
|
||||
Vector result = v1;
|
||||
result[0] /= scale;
|
||||
result[1] /= scale;
|
||||
result[2] /= scale;
|
||||
return result;
|
||||
}
|
||||
|
@ -24,5 +24,7 @@ double operator%(const Vector & v1, const Vector & v2);
|
||||
Vector operator*(const Vector & v1, const Vector & v2);
|
||||
Vector operator+(const Vector & v1, const Vector & v2);
|
||||
Vector operator-(const Vector & v1, const Vector & v2);
|
||||
Vector operator*(const Vector & v1, double scale);
|
||||
Vector operator/(const Vector & v1, double scale);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user