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;
|
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)
|
void Transform::translate(double x, double y, double z)
|
||||||
{
|
{
|
||||||
Matrix t = Matrix::identity();
|
Matrix t = Matrix::identity();
|
||||||
|
@ -12,6 +12,9 @@ class Transform
|
|||||||
public:
|
public:
|
||||||
Transform();
|
Transform();
|
||||||
Transform getInverse();
|
Transform getInverse();
|
||||||
|
void lookAt(const Vector & eye,
|
||||||
|
const Vector & focus,
|
||||||
|
const Vector & up);
|
||||||
void translate(double x, double y, double z);
|
void translate(double x, double y, double z);
|
||||||
void rotate(double angle, double xv, double yv, double zv);
|
void rotate(double angle, double xv, double yv, double zv);
|
||||||
void scale(double xs, double ys, double zs);
|
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];
|
result[2] = v1[2] - v2[2];
|
||||||
return result;
|
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, 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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user