Stack Overflow에 게시하는 것을 고려했지만이 문제에서 Microsoft의 선택에 대한 합리적인 기술적 설명을 생각할 수 없기 때문에이 질문은 너무 주관적이라고 생각합니다. 그러나이 질문은 오랫동안 버그를 일으켰고 프로젝트 중 하나에서 문제가 계속 발생하며 실제로 이것을 설명하려는 시도를 본 적이 없습니다.
OpenGL 은 월드 좌표계의 + Z 부분이 뷰어쪽으로 확장되는 오른손 좌표계를 사용합니다.
DirectX 는 왼손잡이 시스템을 사용하여 월드 좌표의 + Z 부분 이 뷰어에서 멀리 떨어진 화면으로 확장 됩니다 .
나는 글라이드 API를 사용 하지 않았으므로 어떻게 작동했는지 모르겠지만 수집 할 수있는 것에서 왼손잡이 시스템도 사용합니다.
이에 대한 기술적 이유가 있습니까? 그리고 그렇지 않다면, 좌표계의 특정 손에 대한 개념적 이점이 있습니까? 왜 하나가 다른 하나를 선택합니까?
답변
나는 이것이 오래된 게시물이라는 것을 알고 있지만이 게시물이 참조되어 선택된 답변의 음색을 싫어하는 것을 보았습니다.
그래서 나는 약간의 조사를했다!
- DirectX는 오래되었습니다 . 세계가 Nvidia 와 ATI 보다 DirectX와 OpenGL 보다 훨씬 많은 1995 년에 처음 발표되었습니다 . 15 년이 넘었습니다.
- 3dfx Interactive의 글라이드 (오늘날 DirectX 경쟁사 중 하나였습니다. OpenGL은 당시 게임용이 아니 었습니다)는 왼쪽 좌표 시스템을 사용했습니다.
- POV-Ray 및 RenderMan (Pixar의 렌더링 소프트웨어)도 왼손 좌표계를 사용합니다.
- DirectX 9+는 두 좌표계 모두에서 작동 할 수 있습니다.
- 두 WPF 와 XNA (장면에서 다이렉트로 작업) 오른손 좌표계를 사용합니다.
이것으로부터 몇 가지 사항에 대해 추측 할 수 있습니다.
- 산업 표준은 사람들처럼 표준이 아닙니다.
- Direct3D 는 모든 사람이 자신의 방식으로 일을하던 시절 에 만들어졌으며 개발자는 더 잘 알지 못했을 것입니다.
- 왼손잡이는 선택 사항이지만 DirectX 세계에서는 관례입니다.
- 컨벤션은 어려워 지므로 DirectX는 왼손잡이 만 사용할 수 있다고 생각합니다.
- Microsoft는 결국 새로운 API를 배우고 표준을 따랐습니다.
따라서 내 결론은 다음과 같습니다.
그들이 선택해야했을 때, 그들은 표준을 알지 못했고, ‘다른’시스템을 선택했으며, 다른 모든 사람들은 그냥 타고갔습니다.
이전 버전과의 호환성이 Microsoft 게임의 이름이기 때문에 부끄러운 사업이 아니며 불행한 디자인 결정이 내려졌습니다.
답변
아무도 언급하지 않은 것에 놀랐습니다. OpenGL은 왼손 좌표계에서도 작동합니다. 적어도 쉐이더로 작업하고 기본 깊이 범위를 사용하는 경우에는 그렇게합니다.
고정 기능 파이프 라인을 폐기하면 “clip-space”를 직접 처리합니다. OpenGL 사양은 클립 공간을 4D 동종 좌표계로 정의합니다. 정규화 된 장치 좌표를 통해 창 공간까지 변환을 수행하면이를 찾을 수 있습니다.
창 공간은 창의 픽셀 공간에 있습니다. 원점은 왼쪽 아래 모서리에 있으며 + Y는 올라가고 + X는 오른쪽입니다. 그것은 오른손 좌표계와 매우 흡사합니다. 그러나 Z는 어떻습니까?
기본 깊이 범위 (glDepthRange)는 근거리 Z 값을 0으로, 원거리 Z 값을 1로 설정 합니다. 따라서 + Z는 뷰어에서 멀어 집니다.
왼손 좌표계입니다. 예, 깊이 테스트를 GL_LESS에서 GL_GREATER로 변경하고 glDepthRange를 [0, 1]에서 [1, 0]으로 변경할 수 있습니다. 그러나 OpenGL 의 기본 상태는 왼손 좌표계 에서 작동하는 것입니다 . 클립 공간에서 창 공간으로 이동하는 데 필요한 변환은 Z를 무효화하지 않습니다. 따라서 정점 (또는 지오메트리) 셰이더의 출력은 왼쪽 공간 (킨다)입니다. 4D 균질 공간이므로 손을 고정시키기가 어렵습니다).
고정 함수 파이프 라인에서 표준 투영 행렬 (glOrtho, glFrustum 등으로 생성)은 모두 오른쪽 공간에서 왼쪽 공간으로 변환됩니다 . 그들은 Z의 의미를 뒤집습니다. 그들이 생성하는 행렬을 확인하십시오. 눈 공간에서 + Z는 뷰어쪽으로 이동합니다. 투사 후 공간에서 멀어집니다.
나는 마이크로 소프트 (및 GLide)가 단순히 그들의 투영 매트릭스에서 부정을 수행하지 않았다고 생각한다.
답변
순수한 역사입니다. 고대의 초기 동굴 그래픽 프로그래머들은 모니터 (텔레 타입? 스톤 타입?)를 2 차원 그래프 용지로 생각했습니다. 수학 및 공학에서 그래프 용지에 데이터 포인트를 플로팅하는 일반적인 규칙은 x = right, y = up입니다. 실리콘 휠이 발명 된 지 약 일주일 후 어느 날 누군가는 3D 그래픽을 생각했습니다. 어떤 이유로 든이 아이디어의 양초가 머리 위로 깜빡 일 때 Z =를 뷰어에서 멀어지게 선택합니다. (오, 내 오른손은 상상 만해도 아프다.)
그들은 언젠가 그들의 후손이 엔지니어, 과학자, 훌륭한 예술가, 상업 예술가, 애니메이터, 제품 디자이너 등이되어 3D 그래픽이 유용하다는 것을 알지 못했습니다. 이 모든 훌륭한 현대인들은 오른손 좌표계를 사용하여 서로 일치하고 더 많은 수학 텍스트와 물리 규칙을 일치시킵니다.
3D 좌표계를 디스플레이 표면에 기반을 두는 것은 어리석은 일입니다. 집, 의자, 과체중 녹색 오거 또는 은하계를 설명하는 삼각형과 다각형 및 평면이 중요합니다. 오늘날 우리는 모두 오른 손잡이 XYZ 시스템으로 물건을 디자인하고 모델링하며, 어떻게 렌더링 될지를 생각하기 전에 모델 세계의 관점에서 그렇게합니다. 카메라는 어느 시점에 추가되어 미친 방식으로 날아갈 수 있으며 모델을 배변 내에서 조정 된 시스템 변환으로 조정 해야하는 픽셀로 변환하는 보이지 않는 인프라입니다.
혼란을 더하기 위해 일부 그래픽 라이브러리는 CRT가 이미지를 위에서 아래로 스캔하므로 Y = down을 인식합니다. X11, fvwm, gtk +, Win31 API 등 모든 윈도우 시스템 및 윈도우 관리자에서 오늘날에도 사용됩니다. Clutter, Beryl 등과 같은 새로운 3D GUI 시스템이 Z를 처리하는 방식은 3D 그래픽 모델링과는 별개의 문제입니다. 이것은 어플리케이션 프로그래머와 GUI 디자이너에게만 해당됩니다.
답변
하나는 다른 것으로 쉽게 변형 될 수 있기 때문에 둘 다 본질적으로 동일 합니다. 왼손잡이 시스템에서 찾을 수있는 유일한 장점은 물체가 관찰자로부터 멀어 질수록 (x, y 또는 z) 거리가 멀수록 거리가 더 높다는 것입니다. 그러나 이것이 왜 Microsoft가 다른 것을 선택했는지는 잘 모릅니다.
POV-Ray 는 또한 왼손 복도 시스템을 사용합니다.
답변
DirectX (및 Direct3D) 의 수석 개발자 Alex St. John은 최근 이에 대해 언급했습니다. Direct3D의 역사에 관한 기사에서 그는 다음과 같이 썼습니다.
나는 […] Direct3D API를위한 핸드 헬드를 선택하라는 요청을 받았다. 개인적으로 선호 하지 않는 왼손 좌표계를 선택했습니다 . […] 그것은 임의의 선택이었습니다.
출처 :
http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/
답변
이해해야 할 것은 엄청난 양의 프로그래머 시간이 왼손 좌표계와 오른쪽 좌표계 사이를 변환하는 데 낭비되었으며 특정 순간에 어떤 시스템이 필요한지 기억하는 데 더 많은 프로그래머 시간이 낭비되었다는 것입니다.
오른손 좌표계가 산업 표준이되자 모든 것이 사라졌습니다.
손질 문제를 도입하여 수를 두 배로 늘리지 않고 이미 널리 사용되는 좌표계가 충분합니다. Minkler & Minkler, “항공 우주 좌표계 및 변환”을 참조하십시오 . 항공 시뮬레이션 업무를 수행하는 경우 (예 : 비행 시뮬레이션) 해당 책 이 필요 합니다.
내 생각에 Microsoft는 DirectX 프로젝트에 업계 표준에 대해 아는 사람이 없었으며 업계 표준이 있다는 것을 몰랐으며 중요하지 않다고 생각했습니다.
또 다른 가능성은 오른 손잡이 시스템이 업계 표준이라는 것을 알고 있었으며 DirectX를 왼손잡이로 만들었 기 때문에 사람들이 DirectX를 사용하여 OpenGL을 대신 사용하는 코드를 변환하는 것은 그다지 고려하지 않았습니다. 나는 이것이 사실 이었다는 것을 알게 되었기 때문에, 레드먼드에서 도끼 살인자로서 새롭고 아마도 단명 한 경력을 시작하는 것이 필요하다는 것을 알았습니다.
답변
오른 손잡이 또는 왼손잡이에 이점이 없다고 생각하는 모든 사람들에게, 당신은 절대적으로 잘못입니다. 직교 좌표계의 오른 손잡이는 벡터 교차 곱의 정의에서 비롯됩니다. XYZ의 기저 벡터를 들어 u
, v
그리고 w
, w = u X v
.
이 정의는 벡터 수학, 벡터 미적분학 및 많은 물리학의 기초입니다. 전자기 상호 작용을 시뮬레이션하려고한다고 가정하십시오. 자기장 벡터가 있고 M
, 그 필드에서 속도로 움직이는 하전 입자가 v
있습니다. 요금이 어느쪽으로 가속 되나요? 방향으로 쉽게 M X v
. 일부 바보를 제외하고는 디스플레이 시스템을 왼손잡이로 만드는 것이 재미있어서 방향으로 가속됩니다 -M X v
.
기본적으로 두 벡터 수량 사이의 물리적 상호 작용은 오른 손잡이로 정의되므로 해당 상호 작용을 시뮬레이션해야 할 때마다 그래픽 시스템이 오른 손잡이가되어야합니다. 모든 수학.