|
|
在网上看了D3D中很多定义的摄像机的类
class cCamera
{
D3DXVECTOR3 m_vEyePt; // 眼睛点
D3DXVECTOR3 m_vLookatPt; // 看的目标点
D3DXVECTOR3 m_vUpVec; // 向上
D3DXVECTOR3 m_vView; // 观察方向
D3DXMATRIX m_matView; // 观察矩阵
D3DXMATRIX m_matPosition;
FLOAT m_fFOV; // 视野(弧度)
FLOAT m_fAspect; // 纵横比
FLOAT m_fNearPlane; // 最近的点
FLOAT m_fFarPlane; // 最远的点
D3DXMATRIX m_matProj; // 放射矩阵
public:
void Move(LPDIRECT3DDEVICE8 pd3dDevice, float x=0.f, float y=0.f, float z=0.f); // 平移
};
其中camera平移是下面这样实现的
//平移
////////////////////////////////////////////////////////////////////////////就是下面的如何变换
void cCamera::Move(LPDIRECT3DDEVICE8 pd3dDevice,float x,float y,float z)
{
D3DXMATRIX matT;
D3DXMatrixIdentity(&matT); //定义单位矩阵
D3DXMatrixTanslation(&matT,x,y,z); //建立平移矩阵
D3DXMatrixMultiply(&m_matPosition,&matT,&m_matPosition);
D3DXMatrixInverse(&m_matView,NULL,&m_matPosition); //为什么要进行逆矩阵变换
pd3dDevice->SetTransform(&D3DTS_VIEW,&m_matView);
}
我线性代数学得糟,一时看不懂平移里矩阵是怎么变换的,哪位大哥指点一下. |
|