2.10 Drawing Objects Using cObject(用cObject绘出对象)

 

“为什么不直接用cMesh对象绘出模型?”答案是:memory usage(内存用法);要是你想反复利用同一个网格(mesh,cObject就可以帮你解决:

class cObject

{

protected:

cGraphics *m_Graphics; // cGraphics父对象

cMesh *m_Mesh; // 要绘出的网格

sAnimationSet *m_AnimationSet; // 动画设置

cWorldPosition m_Pos; // 世界方向

BOOL m_Billboard; // 是否启用公告牌标志

unsigned long m_StartTime; // 动画开始时间

// 更新框架位置和绘出网格

void UpdateFrame(sFrame *Frame, D3DXMATRIX *Matrix);

void DrawFrame(sFrame *Frame);

void DrawMesh(sMesh *Mesh);

 

public:

cObject(); // 构造函数

~cObject(); // 析构函数

// 创建和释放对象(可选择要设置的网格)

BOOL Create(cGraphics *Graphics, cMesh *Mesh = NULL);

BOOL Free();

//启用或禁用公告牌

BOOL EnableBillboard(BOOL Enable = TRUE);

// 将一个对象附加到另一个对象框架中

// (当update被调用时将使这些矩阵组合)

// Defaults to first frame found in mesh.

BOOL AttachToObject(cObject *Object, /

char *FrameName = NULL);

// 对象的位置旋转缩放(分绝对和相对)

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);

D3DXMATRIX *GetMatrix(); // 返回对象矩阵

// 返回对象坐标信息

float GetXPos();

float GetYPos();

float GetZPos();

float GetXRotation();

float GetYRotation();

float GetZRotation();

float GetXScale();

float GetYScale();

float GetZScale();

// 返回缩放盒子和其半径

BOOL GetBounds(float *MinX, float *MinY, float *MinZ, /

float *MaxX, float *MaxY, float *MaxZ, /

float *Radius);

// 设置要绘出的网格

BOOL SetMesh(cMesh *Mesh);

// 设置新动画 (w/名称和开始引用的时间)

BOOL SetAnimation(cAnimation *Animation, /

char *Name = NULL, /

unsigned long StartTime = 0);

char *GetAnimation(); // 获得指向动画名称的指针

//在一个新的时间重放动画

BOOL ResetAnimation(unsigned long StartTime = 0);

// 基于时间更新动画 并使用光滑(Smooth)

BOOL UpdateAnimation(unsigned long Time, BOOL Smooth = TRUE);

// 动画结束返回TRUE

BOOL AnimationComplete(unsigned long Time);

BOOL Update(); // 更新对象转换矩阵

BOOL Render(); //用世界转换绘出对象

};

 

cObject类可以让3-D对象在你的世界中做任何事情。你可以定位你的对象、设置新网格、让视线和对象在同一线上(公告牌)、设置和更新动画、附加到其他对象上、返回盒子和其半径。

要使用cObject工作,只需要实例化他,并给他一个先前装载过的mesh对象,然后你就可以定位对象和显示了,例子:

// g_Graphics 一个初始化过的 对象

// g_Mesh 已经被装载过的网格对象

cObject g_Object;

g_Object.Create(&g_Graphics, &g_Mesh);

g_Object.Move(100.0f, 50.0f, 100.0f);

g_Object.Render();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值