|
|
先来看个函数:
struct stuRotateZoom
{
float RotateX;
float RotateY;
float RotateZ;
float ZoomX;
float ZoomY;
float ZoomZ;
};
void CDXFont: raw3DFont(unsigned int iNum,RECT* rctDraw,stuRotateZoom* Rotate)
{
if ( iNum>m_vtr3DFont.size()-1 )
{
return;
}
//Rotate Matrix ,use " m_fRotateY,m_fRotateX,m_fRotateZ" to choose the Rotate mode and speed
D3DXMatrixRotationYawPitchRoll(&matRotate,Rotate->RotateY,Rotate->RotateX,Rotate->RotateZ);
//Translation Matrix
D3DXMatrixTranslation( &matTrans,-m_vtr3DFont[iNum].iCenterX,-m_vtr3DFont[iNum].iCenterY,0);
//Zoom Matrix
D3DXMatrixScaling( &matZoom, Rotate->ZoomX,Rotate->ZoomY,Rotate->ZoomZ);
//Multiply Matrixs above
D3DXMatrixMultiply( &matWorld, &matTrans,&matRotate);
D3DXMatrixMultiply( &matWorld, &matWorld,&matZoom);
//一直到这里都是在计算矩阵
//这里才开始真正的渲染
m_lpD3DDevice->SetTransform( D3DTS_WORLD, &matWorld );
m_lpD3DDevice->SetMaterial(&m_vtr3DFont[iNum].Font3Dmtrl);
m_vtr3DFont[iNum].mesh->DrawSubset(0);
}
正如大家所见,很多封装 DirectX 的类里面,都有这样的函数,里面大概有两部分:
1.计算矩阵
2.设置矩阵,并使用 DirectX API 渲染
我现在的问题是:
1.是否应该把第一部分,也就是计算矩阵的部分,剥离出去
2.如果剥离出去,那这个函数的参数应该怎么设计
|
|