|
|
我定义了
eye=D3DXVECTOR3 (0.0f,0.0f,0.0f);
at=D3DXVECTOR3 (0.0f,0.0f,1.0f);
ax=D3DXVECTOR3 (0.0f,0.0f,11.0f);
up=D3DXVECTOR3 (0.0f,1.0f,0.0f);
right=D3DXVECTOR3 (11.0f,0.0f,0.0f);
几个向量,
然后用键盘操作,想实现摄象机的旋转平移,就像第一人称射击游戏的主视角那样,
平移操作 右:BasicXFile.eye+=BasicXFile.right*1;
BasicXFile.at+=BasicXFile.right*1;
左:BasicXFile.eye-=BasicXFile.right*1;
BasicXFile.at-=BasicXFile.right*1;
前: BasicXFile.eye+=BasicXFile.ax*1;
BasicXFile.at+=BasicXFile.ax*1;
后:BasicXFile.eye-=BasicXFile.ax*1;
BasicXFile.at-=BasicXFile.ax*1;
旋转操作: 按z:BasicXFile.RotateY(0.1f);
按x:BasicXFile.RotateY(-0.1f);
旋转代码: void CBasicXFile::RotateY(float fAngle){
D3DXMATRIX matRotate;
D3DXVECTOR3 staticy(0.0f,1.0f,0.0f);
D3DXMatrixRotationAxis(&matRotate,&staticy,fAngle);
D3DXVec3TransformCoord(&right,&right,&matRotate);
D3DXVec3TransformCoord(&at,&at,&matRotate);
D3DXVec3TransformCoord(&xup,&xup,&matRotate);
D3DXVec3TransformCoord(&ax,&ax,&matRotate);}
摄影坐标变换 3DXMATRIX viewMatrix;
D3DXMatrixLookAtLH(&viewMatrix,&eye,&at,&up); //取得变换矩阵
m_pIDirect3DDevice->SetTransform(D3DTS_VIEW,&viewMatrix); //设置观察变换矩阵
代码就是这些 只要不做自身旋转,光平移的话没有问题,但是一旋转,再平移,上下左右就全乱了,如果再转几次的话有时候会变正确,有时候是前后移动正确,左右移动错误!!不知道为什么??
如果我在旋转代码中加入:D3DXVec3TransformCoord(&eye,&eye,&matRotate);旋转和移动全正常,但是摄象机就不做自身旋转了,而是做饶中心轴的转大圈子!!!!想了好几天也搞不明白到底是什么问题,请救救我吧 谢谢大家了!!!
|
|