Эй, недавно я пытался сделать хорошую рабочую камеру в 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 если вы хотите код, пожалуйста, дайте мне знать. Спасибо.
Вы можете легко использовать D3DXMatrixLookAtLH
(доктор) даже для фпс. Положение глаз персонажа — 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);
Других решений пока нет …