嘿,最近我一直试图在DirectX 9中制作一个好的工作相机,但我遇到了问题。所以,让我告诉你一些我的代码。
我不使用D3DXMatrixLookAtLH
功能,因为我也想旋转相机。
D3DXMATRIX matView,
matVTranslate,
matVYaw,
matVPitch,
matVRoll;
D3DXTranslation(&matVTranslate, x, y, z);
D3DXRotationY(&matVYaw, yaw);
D3DXRotationX(&matVPitch, pitch);
D3DXRotationZ(&matVRoll, roll);
matView = matVTranslate * (matVPitch * matVYaw * matVRoll);
d3ddev->SetTransform(D3DTS_VIEW, &matView);
它会产生非常奇怪的效果。有没有更好的方法来创建一个fps相机?如果您想运行该程序,这是exe。 The Exe如果您需要该代码,请告诉我们。谢谢。
答案 0 :(得分:3)
即使是fps,您也可以轻松使用D3DXMatrixLookAtLH
(doc)。角色的眼睛位置是pEye。对于视图的旋转,您可以保存一个向量,该向量包含viewdirection的标准化向量。您可以使用您的旋转矩阵进行转换,将其添加到pE的pEye中。
D3DXMATRIX matView,
matLook;
D3DXMatrixRotationYawPitchRoll(&matLook,pitch,yaw,roll);
D3DXVector3 lookdir;
// yaw,pitch,roll are assumed to be absolute, for deltas you must save the lookdir
lookdir = D3DXVector3(0.0,0.0,1.0);
D3DXVec3TransformCoord(&lookdir,&lookdir,&matLook);
D3DXVector3 at;
at = camerapos + lookdir;
D3DXMatrixLookAtLH(&matView,&camerapos,&at,&up);
d3ddev->SetTransform(D3DTS_VIEW, &matView);