先来看一个函数:
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.如果剥离出去,那这个函数的参数应该怎么设计 |