2013-05-16 4 views
1

DirectX를 사용하는 소프트웨어에서 내 보낸 정점 데이터가 모두있는 파일이 있습니다. 이제 Ogre에서 메쉬를 만들고 싶습니다. Xcode를 사용하여 Mac에서 개발 한 이후 OpenGL을 사용하도록 Ogre를 설정했습니다.DirectX 버텍스를 OpenGL 버텍스로 변환

내 질문에 어떻게 이러한 정점을 OpenGL과 호환되도록 변환 할 수 있습니까? 예를 들어

나는이 형식의 DirectX 정점이있는 경우 : OpenGLVertex vertexGL = DirectXVertex vertexDX을 그것이 OpenGL은 정점에서 어떻게 보이는지 = {X, Y, Z} ?

또한 파일에는 오른쪽 꼭지점에 대한 인덱스가있는 삼각형의면 데이터가 있습니다. 그것들은 너무 어딘가로 변환되어야합니까, 아니면 정점 만 변경해야합니까?

답변

2

DirectX는 왼손잡이 좌표계를 사용하는 반면, OpenGL은 오른 손잡이 시스템을 사용합니다.

article on MSDN은 데이터를 다른 방법으로 (예 : OpenGL에서 Directx로) 포팅 할 때 수행해야 할 작업을 설명합니다. 주요 점은 다음과 같습니다.

Direct3D는 왼손잡이 좌표계를 사용합니다. 오른손 좌표계를 기반으로하는 응용 프로그램을 이식하는 경우 Direct3D로 전달되는 데이터를 두 가지 변경해야합니다.

  • 삼각형 버텍스의 순서를 뒤집어 시스템이 정면에서 시계 방향으로 가로 지르도록합니다. 즉, 정점이 v0, v1, v2이면 Direct3D에 v0, v2, v1로 전달합니다.

  • 뷰 매트릭스를 사용하여 z 공간에서 -1로 스케일링합니다. 이렇게하려면 뷰 매트릭스에 사용하는 D3DMATRIX 구조체의 _31, _32, _33 및 _34 멤버의 부호를 바꿉니다. 기사는 위의 방법이 다이렉트로 OpenGL을 이리저리 포트에 대해 설명하면

그래서, 당신은 다른 방법을 변환하려면 위의 역을 할 필요가있다. 그것이 일어날 때, 위의 연산의 역함은 완전히 동일합니다.

OpenGL은 Directview처럼 모델 뷰 매트릭스에 연결되어 있기 때문에 별도의 모델 및 뷰 매트릭스를 가지고 있지 않습니다. 다음과 같은 왼손 좌표계를 시뮬레이션 할 수 있습니다.

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glScalef(1.0f, 1.0f, -1.0f); 
+0

답장을 보내 주셔서 감사합니다. "삼각형 꼭지점의 순서 뒤집기"란 한 가지 질문은 (x, y, z) => {x, z, y}의 순서를 뒤집거나 삼각형의면 순서를 뒤집는 것을 의미합니까? – Silex

+1

@Silex - 삼각형의 얼굴 순서 뒤집기 –

+0

그래, 나도 그렇게 생각 했어. 네 도움과 상세한 답변을 주셔서 감사합니다! – Silex