C ++ DirectX FPS камера странность

Эй, недавно я пытался сделать хорошую рабочую камеру в 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 если вы хотите код, пожалуйста, дайте мне знать. Спасибо.

0

Решение

Вы можете легко использовать 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);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]