예제 #1
0
파일: Matrix.hpp 프로젝트: rhvall/CarDemo
 static Matrix4T<T> rotation(float degrees, const Vector3T<T> &inaxis)
 {
     Matrix4T<T> m;
     
     Vector3T<T> axis = inaxis;
     
     axis.normalize();
     
     float c = cos((float)degToRad(degrees));
     float s = sin((float)degToRad(degrees));
     
     m.x.x = (axis.x * axis.x) * (1.0f - c) + c;
     m.y.x = (axis.y * axis.x) * (1.0f - c) + (axis.z * s);
     m.z.x = (axis.z * axis.x) * (1.0f - c) - (axis.y * s);
     
     m.x.y = (axis.x * axis.y) * (1.0f - c) - (axis.z * s);
     m.y.y = (axis.y * axis.y) * (1.0f - c) + c;
     m.z.y = (axis.z * axis.y) * (1.0f - c) + (axis.x * s);
     
     m.x.z = (axis.x * axis.z) * (1.0f - c) + (axis.y * s);
     m.y.z = (axis.y * axis.z) * (1.0f - c) - (axis.x * s);
     m.z.z = (axis.z * axis.z) * (1.0f - c) + c;
     
     return m;
 }
예제 #2
0
파일: Matrix.hpp 프로젝트: rhvall/CarDemo
 static Matrix4T<T> buildViewMatrix(const Vector3T<T> &from, const Vector3T<T> &lookingAt, const Vector3T<T> &up /*= Vector3(1,0,0)*/)
 {
     Matrix4T<T> r;
     r.SetPositionVector(Vector3T<T>(-from.x,-from.y,-from.z));
     
     Matrix4T<T> m;
     
     Vector3T<T> f = (lookingAt - from);
     f.normalize();
     
     Vector3T<T> s = Vector3T<T>::Cross(f,up);
     Vector3T<T> u = Vector3T<T>::Cross(s,f);
     
     m.x.x = s.x;
     m.x.y = s.y;
     m.x.z = s.z;
     
     m.y.x = u.x;
     m.y.y = u.y;
     m.y.z = u.z;
     
     m.z.x = -f.x;
     m.z.x = -f.y;
     m.z.z = -f.z;
     
     return m * r;
 }
예제 #3
0
파일: Vector.hpp 프로젝트: rhvall/CarDemo
 Vector3T normalized() const
 {
     Vector3T v = *this;
     v.normalize();
     return v;
 }