2.7 World Transformations with cWorldPosition(世界坐标啊)
我想你一定想知道老外在这各地方说些什么废话,我为什么不翻译呢?
恩,现在还是不翻译了吧:
class cWorldPosition { protected: BOOL m_Billboard; // 标志是否使用公告牌 // 当前坐标、旋转、缩放 float m_XPos, m_YPos, m_ZPos; float m_XRotation, m_YRotation, m_ZRotation; float m_XScale, m_YScale, m_ZScale; D3DXMATRIX m_matWorld; //世界转换矩阵 D3DXMATRIX m_matScale; //缩放矩阵 D3DXMATRIX m_matRotation; // 旋转矩阵 D3DXMATRIX m_matTranslation; // 平移矩阵 D3DXMATRIX *m_matCombine1; // 组合 matrix 1 D3DXMATRIX *m_matCombine2; // 组合 matrix 2
public: cWorldPosition(); // 构造函数 // 返回世界转换矩阵 D3DXMATRIX *GetMatrix(cGraphics *Graphics = NULL); // 通过外部矩阵与世界矩阵组合 BOOL SetCombineMatrix1(D3DXMATRIX *Matrix = NULL); BOOL SetCombineMatrix2(D3DXMATRIX *Matrix = NULL); BOOL Copy(cWorldPosition *DestPos); // 复制到另一个类 // 移动到一个坐标,分绝对坐标和相对坐标 BOOL Move(float XPos, float YPos, float ZPos); BOOL MoveRel(float XAdd, float YAdd, float ZAdd); // 设置旋转,分绝对和相对 BOOL Rotate(float XRot, float YRot, float ZRot); BOOL RotateRel(float XAdd, float YAdd, float ZAdd); // 设置缩放,分绝对和相对 BOOL Scale(float XScale, float YScale, float ZScale); BOOL ScaleRel(float XAdd, float YAdd, float ZAdd); // 更新矩阵并为公告牌提供cGraphics对象 BOOL Update(cGraphics *Graphics = NULL); // 启用或禁用公告牌 BOOL EnableBillboard(BOOL Enable = TRUE); //获取当前坐标、旋转、缩放 float GetXPos(); float GetYPos(); float GetZPos(); float GetXRotation(); float GetYRotation(); float GetZRotation(); float GetXScale(); float GetYScale(); float GetZScale(); }; |
大部分的方法一看就明白,只有这个Update, GetMatrix, SetCombineMarix1 和 SetCombineMarix2。Update函数将(使用包含的方向(orientation))重建世界转换矩阵,取得并加入一个公告牌矩阵和两个外部矩阵(我叫他组合矩阵(combine matrices))。
要设置这两个组合矩阵,需要使用SetCombineMatrix1和SetCombineMatrix2函数
GetMatrix函数返回当前世界转换矩阵。(不会翻译了)
例子:
cWorldPosition ObjectPos, ObjectPos2; ObjectPos.Move(10.0f, 100.0f, -56.0f); ObjectPos.Rotate(1.57f, 0.0f, 0.785f); ObjectPos.Update(); // 计算更新矩阵 // 第二个对象与第一个结合 ObjectPos2.SetCombineMatrix1(ObjectPos.GetMatrix()); ObjectPos2.Rotate(0.0f, 0.0f, 3.14f); ObjectPos2.Update(); // 用组合的计算更新矩阵 |