0

嘿,最近我一直在尝试在 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。Exe如果您想要代码,请告诉我。谢谢你。

4

1 回答 1

3

即使是 fps,您也可以轻松使用D3DXMatrixLookAtLH( doc )。角色的眼睛位置是 pEye。对于视图的旋转,您可以保存一个向量,其中包含您的视图方向的归一化向量。这个你可以用你的旋转矩阵进行转换,然后将它添加到 pEye 中以获取 pAt。

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);
于 2012-12-10T10:38:17.370 回答