2.7 World Transformations with cWorldPosition(世界坐标啊)

 

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 SetCombineMarix2Update函数将(使用包含的方向(orientation))重建世界转换矩阵,取得并加入一个公告牌矩阵和两个外部矩阵(我叫他组合矩阵(combine matrices))。

要设置这两个组合矩阵,需要使用SetCombineMatrix1SetCombineMatrix2函数

 

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(); // 用组合的计算更新矩阵

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值