2016-07-30 12 views
1

Y를 내 축으로하는 C++ DirectX9 렌더링 엔진이 있습니다. Z 축을 상 축으로 모델링 한 모델을 가져 오면 모든 모델의 정점의 Y 및 Z 값을 바꿔줌으로써 모델의 방향이 올바르게 지정됩니다. 이것은 메시의 대부분 (전부는 아님)의 권선 순서가 잘못되었다는 사실을 제외하고는 잘 작동합니다.메쉬의 와인딩 순서를 깨지 않고 Z-Up 정점을 ​​Y-Up 정점으로 변환하는 방법. (DX9c)

후면 컬링을 사용하여 모델을 렌더링하므로 모델의 외부 셸이 보이지 않으며 내부 셸이 표시됩니다.

나는 문제를 바로 잡기 위해 색인을 뒤집어 썼다. 그리고 그것은 잘 작동한다. 그러나 모든 모델이 잘못된 잘못된 권선 순서로 고통받는 것은 아니기 때문에 정확한 권선 순서로 모델의 절반에 앉아있다. 나머지 절반은 권선 오더가 잘못되었습니다.

그래서 내 질문을 생각해 보겠습니다 : 어떻게 그 과정에서 권선 순서를 깨지 않고 Y를 그것의 위 축으로 삼고 3D 모델로 Z 축을 가진 3D 모델을 올바르게 변환합니까?

미리 감사드립니다.

+0

Y를 -Z로 바꾸십시오. –

답변

1

좌표계의 건전함을 보존하지 않으면 권선 순서가 잘못되었습니다. 전형적으로 (x, y, z)는 RIGHT-HANDED 좌표계입니다. 즉, 엄지 손가락을 + x 방향으로, 오른쪽 검지 손가락을 + y 방향으로 향하게하고 다른 세 손가락을 자연스럽게 컬링하면 + z 방향을 향해야합니다. 시스템을 오른 손잡이에서 왼손잡이로 바꾼 방식으로 좌표를 대칭 이동했을 수 있습니다. (x, y, z)는 (y, z, x) 또는 (z, x, y)로 바뀔 수 있지만 다른 순열은 잘못된 바람을 나타낼 것입니다.

+0

안녕하세요, Bruce. 답변 해 주셔서 감사합니다. 내 엔진은 왼손잡이 좌표계 (direct3D)를 사용하며 가져와야하는 메쉬는 오른손잡이 시스템에서 가져온 것입니다 ... 다음 링크는 정확한 사례를 다룰 때 어떻게 처리하는지 잘 설명합니다 ...하지만 내 문제는 내가 가져야 만하는 데이터는 오른손이며 위쪽 축은 Z입니다. 그래서 Y- 위로 왼손잡이 시스템으로 변환하고 감기 주문을 그대로 유지해야합니다. – DPVisser

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/bb204853(v=vs.85).aspx – DPVisser