写这个,实现了除透视投影的其他大多数东西,反射,切变,缩放,平移,旋转,矩阵还真是一个好工具.连续研究这些东西大概三个星期了,真有点恶心了.C++叫我忘得差不多了,用C#永久了真的会白痴许多的.游戏开发渐渐会降低开发者的门槛,真正要做到牛还是要脚踏实地一步一步学习好多东西的.先去继续研究别的吧,而后再决定是不是杀回来.图形学方向还真多,先把数学这块学好吧,之后就简单多了.是吧,不然看别的,是干眼馋啊.
#ifndef MATRIX4X3_H_
#define MATRIX4X3_H_
class Vector3 ;
class EulerAngles ;
class Quaternion ;
class RotationMatrix ;
class Matrix4x3
{
private:
enum AxisName
{
X,
Y,
Z,
} ;
public:
float m11, m12, m13 ;
float m21, m22, m23 ;
float m31, m32, m33 ;
float tx, ty, tz ;
void Identity() ;
void ZeroTranslation() ;
void SetTranslation(const Vector3& d) ;
void SetUpTranslation(const Vector3& d) ;
void SetUpLocalToParent(const Vector3& pos, const EulerAngles& orient) ;
void SetUpLocalToParent(const Vector3& pos, const RotationMatrix& orient) ;
void SetUpParentToLocal(const Vector3& pos, const EulerAngles& orient) ;
void SetUpParentToLocal(const Vector3& pos, const RotationMatrix& orient) ;
void SetUpRotate(AxisName axisName, float theta) ;
void SetUpRotate(const Vector3& axis, float theta) ;
void FromQuaternion(const Quaternion& q) ;
void SetUpScale(const Vector3& s) ;
void SetUpScaleAlongAxis(const Vector3& axis, float k) ;
void SetUpShera(AxisName axisName, float s, float t) ;
void SetUpProject(const Vector3& n) ;
void SetUpReflect(AxisName axisName, float k = 0) ;
void SetUpReflect(const Vector3& n) ;
static float Determinant(const Matrix4x3& m) ;
static Matrix4x3 Inverse(const Matrix4x3& m) ;
} ;
#endif