2010-07-06 5 views
0

D3DXMatrixRotationYawPitchRoll() 함수는 지정된 yaw, pitch 및 roll이있는 행렬을 만듭니다. 아이폰 개발자를위한 동등한 기능이 있나요 ?? 아이폰 개발자를위한 D3DXMatrixRotationYawPitchRoll()과 동일한 기능이 있습니까?

나는 그것은 코드를 많이하지, 그리고 의견이 대부분 이해할 보이지만, 코드 나 '몇 가지의 DirectX 기능에 의존하는 권선 도로 나 롤러 코스터 here.

을 그리기위한 아름다운 작은 샘플 프로젝트를 발견 내 아이폰 프로젝트에서 사용하기에 C에서 재현하기에는 아직 똑똑하지 않다.

누군가 나를 올바른 방향으로 안내 할 수 있습니까? yaw, pitch, roll 값으로 회전 행렬을 만들어야합니다.

 D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(
    __inout D3DXMATRIX *pOut, 
    __in  FLOAT Yaw, 
    __in  FLOAT Pitch, 
    __in  FLOAT Roll 
); 

이위한 등가 GLU (*)가된다

이 다이렉트 X 기능 서명

이 있습니까?


(읽기 ... 시간 이상)


음 (갈 더 많은) 독서의 꽤 후에, 이것은 내가 수집 한 것입니다

:

This 사이트는 큰 도움이되었습니다.

내가 3 개 오일러 각도를 변환해야 할 것으로 보인다

3 개의 독립적 인 단위 쿼터니언으로 (즉, 피치, 롤, 요 (yaw)가 호출 기능) :

Qx = [ cos(a/2), (sin(a/2), 0, 0)] 
Qy = [ cos(b/2), (0, sin(b/2), 0)] 
Qz = [ cos(c/2), (0, 0, sin(c/2))] 

그리고 하나 개의 사원 수에 다음을 결합 :

Qcombined = QX * * QY QZ

이어서

I에서 OpenGL은 이렇게 좋아할 회전 행렬의 종류로 다시이 결과 "부"쿼터니온으로 변환 할 수

,745,
Matrix = [ 1 - 2y2 - 2z2 2xy - 2wz  2xz + 2wy 
       2xy + 2wz 1 - 2x2 - 2z2 2yz - 2wx 
       2xz - 2wy  2yz + 2wx 1 - 2x2 - 2y2 ] 
+0

쿼터니언을 사용할 필요가 없습니다. 축에 대한 세 개의 회전 행렬을 만들고 곱하면됩니다. –

+0

쿼터니언이 없어도 Gimble Lock이 가능하지 않을까요? (나는 여전히 어떤 일이 벌어지고 있는지에 대한 어떤 종류의 정신적 인 이미지를 구축하려고 노력하고있다.) – user360092

+0

매번 세 각도에서 행렬을 재구성하면 안된다. –

답변

0

여기에 찾고 : http://en.wikipedia.org/wiki/Rotation_matrix#Three_dimensions

당신이해야 Rz가 (굴러라)으로 구성된 행렬을 작성 * 수신 (- 피치) * Ry가 (요), 다음 결과를 glMultMatrix에 전화를 사용하는 (당신이 경우 행 시장 행렬을 가짐) 또는 glMultTransposeMatrix (행 - 시장 행렬이있는 경우)로보기를 설정할 수 있습니다. http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrix.xml http://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml