2012-12-09 4 views
0

안녕하세요 최근에 저는 DirectX 9에서 작동하는 좋은 카메라를 만들려고했지만 문제가있었습니다. 자, 제 코드를 보여 드리겠습니다.C++ DirectX FPS 카메라 기묘함

나는 카메라도 회전시키고 싶기 때문에 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 카메라를 만드는 더 좋은 방법이 있습니까? 프로그램을 실행하려면 다음을 실행하십시오. 코드가 필요하면 The Exe 알려주세요. 고맙습니다.

답변

3

fps 인 경우에도 D3DXMatrixLookAtLH (doc)을 쉽게 사용할 수 있습니다. 캐릭터의 눈 위치는 pEye입니다. 뷰를 회전하려면 뷰 방향의 정규화 된 벡터가 포함 된 벡터를 보유 할 수 있습니다. 이것은 당신의 회전 매트릭스로 변환 할 수 있습니다, 그것을 pAt에 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); 
+0

감사합니다.하지만 너무 많은 조사를 매일하기 때문에 코드에 표시 할 수 있습니다. 감사. –

+0

나는 또한 초보자이지만 매우 빠른 학습자입니다. –

+0

몇 가지 예제 코드를 추가했습니다. 나는 그것을 테스트하지는 않았지만 일반적인 생각은 분명히 있어야한다. :) – Gnietschow