|
|
在封装 DirectX9 的过程中,都会使用到绘制函数,就拿最简单的绘制 mesh 的函数来说吧,我们要绘制一个 mesh 的时候,必须要传递这些参数:
1.平移矩阵的3个 x,y,z
2.旋转矩阵的3个 x,y,z
3.缩放矩阵的3个 x,y,z
加起来是9个。。。。
那么在设计函数的时候,难道要在参数列表里写上这9个参数???
我现在是这么写的:
struct SMetrix
{
float TransX;
float TransY;
float TransZ;
float RotateX;
float RotateY;
float RotateZ;
float ZoomX;
float ZoomY;
float ZoomZ;
};
void CDXFont: raw3DFont(unsigned int iNum,RECT* rctDraw,const SMetrix* Boring9);
但是这么写,有个非常严重的问题:当我在主函数里调用这个函数的时候,我快疯了。。。。
SMetrix mtxTitleText;
mtxTitleText.TransX=0.5f;
mtxTitleText.TransY=0.0f;
mtxTitleText.TransZ=0.1f;
mtxTitleText.RotateX=0.0f;
mtxTitleText.RotateY=2.5f;
mtxTitleText.RotateZ=0.0f;
mtxTitleText.ZoomX=1.0f;
mtxTitleText.ZoomY=1.0f;
mtxTitleText.ZoomZ=1.0f;
RECT rctTitleText={0,0,800,600};
CDXFont::Draw3DFont(2,rctTitleText,&mtxTitleText);
这么调用,我实在是受不了。。。。。。
有个朋友给我提供了另外一种参数形式:
void CDXFont::Draw3DFont(unsigned int iNum,RECT* rctDraw,
const D3DXVECTOR3& vTrans,
const D3DXVECTOR3& vRotate,
const D3DXVECTOR3& vZoom);
如果是这样的话,那么调用的时候就是:
CDXFont::Draw3DFont(2,rctTitleText,
D3DXVECTOR3(0.0f,0.5f,0.1f),
D3DXVECTOR3(0.0f,2.5f,0.0f),
D3DXVECTOR3(1.0f,1.0f,1.0f));
确实比上面那个函数在调用的时候简单许多,但是,参数个数依然比较多,而且最后3个参数是在传递的时候构造的,函数结束的时候还要析构。。。会影响速度。。。
大家在封装绘图函数的时候,是如何处理这必须使用的“九大金刚”的呢????
|
|