X, Y, Z 좌표 표준?


12

그럼에도 불구하고 나는 어떤 종류의 게임이든 3D 개발에 익숙하지 않다. 튜토리얼과 예제를 읽으면서 X / Y / Z 좌표가 첫 번째 추측보다 약간 뒤 떨어진 것처럼 보입니다.

사람이 들판을 돌아 다니면 X / Y 위치가 바뀌고 언덕을 오르 내리거나 걷는 경우 Z 위치가 바뀔 것이라고 상상했습니다. 필드 주위를 걷다가 X / Z를 바꾸고 언덕을 오르 내리거나 언덕을 오르 내리면 Y가 바뀌기 때문에 내 가정이 틀린 것 같습니다.

1) 내 관측치가 정확합니까? 3D는 새로운 것이기 때문에 일에 대해 제대로 생각하지 않을 수 있습니다.

2) 수평 이동의 논리는 X / Z이고 수직 이동의 논리는 무엇입니까?

3) XNA 프레임 워크에서 X / Y를 수평 이동으로, Z를 수직 이동으로 사용하는 것이 잘못입니까?


왼손 / 오른손 좌표계. DirectX는 왼손이며 OpenGL의 기본값은 오른손입니다.
Jonathan Connell

답변:


19

당신의 가정은 틀리지 않습니다 : 각 엔진은 이러한 좌표를 다르게 취급합니다. 일반적으로 X는 거의 항상 동서 축이지만 Y 또는 Z가 고도 축인지 여부는 다양합니다. 내가 알기로, Quake 3, 소스 엔진 및 토크 엔진은 모두 Z가 위로 올라갑니다. 모델링 도구 3DS Max도 마찬가지입니다. 드문 일이 아닙니다.

대략 내림차순으로 정렬 된 좌표계를 갖는 것이 합리적이므로 표현을 더 적은 치수로 평탄화하는 것이 이해하기 쉽습니다. 예를 들어 게임이 2D 높이 맵에 설정되어 있으면 Z가 '위로'올라가는 것이 좋습니다. 3D 세계의 X 및 Y 좌표는 높이 맵의 X 및 Y 좌표에 직접 매핑되기 때문입니다. 반면에 렌더링 (및 많은 게임 엔진 개발자의 경우)에 대해 주로 생각한다면 X와 Y는 화면 좌표가되므로 3 번째 축을 추가하면 자연스럽게 화면 안팎으로 이동합니다.

가장 쉬운 방법을 사용하십시오. 그러나 선택 사항은 임의적이며 둘 사이를 변환하고 하나의 프로그램 내에서 여러 좌표계를 사용해야 할 수도 있습니다.


나는 실제로 다른 두 가지 대답을 더 좋아하지만 이것이 받아 들여지는 대답이므로 Y는 수직이고 Z는 화면에 표시되는 것이 대부분의 3D 하드웨어 API가 작동하도록 설정되어 있음을 지적합니다 (DirectX 및 OpenGL) . 자신의 시스템을 원한다면 번역이 필요할 수 있으므로이 점을 알고 있어야합니다. (부적절하지만 일관되게 사용되는 것은 종종 원하는대로 작동 할 수 있으므로 '있을 수 있습니다':)
James

1
기술적으로 OpenGL은 기본적으로 Z가 화면에서 나오도록합니다. 방향을 포함하면 방향과 DirectX 모두 Z와보기 방향이 평행하지만 여전히 호환되지 않습니다! 3D로 작업 할 때는 회전, 변환 및 스케일링을 통해 한 좌표계에서 다른 좌표계로 전환하는 데 능숙해야합니다. 실제로 이것이 모델이 세상에서 끝나는 방식입니다. 따라서 표준.
Kylotan 2016 년

수백만 개의 삼각형을 다룰 때 하드웨어 코디네이터 시스템과 싸울 필요가 적을수록 좋습니다.) 하루가 끝날 때 스트레스 수준에도 불구하고 게임을하는 것은 재미 있습니다. )
James

화면으로 들어가거나 나오거나 "고도"인 "Z"라는 개념은 다소 오해의 소지가 있습니다. 변환을 개념화하는 것이 더 쉬울 수 있습니다. 우리는 3D / 4D 꼭짓점 좌표를 제출합니다.이 좌표는 결국 2D 창 공간으로 변환되지만 깊이 값이 있습니다. API가 기본적으로 X, Y 또는 Z의 3D 좌표를 "깊이"에 매핑한다는 아이디어는 정확하지 않습니다. 좌표의 의미를 서로 바꾸는 변환을 수행 할 수 있습니다. 해당 변환이 끝날 때 2D 창 공간 좌표와 깊이 값이 계속 표시됩니다.
PatrickB

1
나는 우리가 나머지 부분에 동의하지 않는 곳을 완전히 확신하지 못합니다. 물론 x, y, 깊이로 끝까지 투영 할 수 있다면 원하는 좌표 공간을 사용할 수는 있지만이 질문은 주로 특정 규칙이 존재하는 이유에 관한 것입니다. 좌표계의 경우, 관습은 필연적으로 실제 개념과 연결됩니다.
Kylotan

6

차트가 앞에있는 종이를보고 있다고 가정 해 봅시다. 축은 일반적으로 아래쪽에 X가 표시되고 세로가 Y에 표시됩니다. 이렇게하면 Z가지면을 따라 바깥 쪽 축이됩니다.

그것은 단지 관습 일 뿐이지 만, Z를 장면의 깊이로 생각하는 그래픽에서 많이 사용됩니다.

CAD와 같은 다른 분야에서는 버전이 더 일반적입니다.


4

아이디어는 x와 y 축이 동일하게 유지된다는 것입니다. y는 화면에서 '위'이고 x는 가로입니다.

z-3 차원으로 화면으로 다시 투영됩니다 (여기서는 손질 문제 무시). 3 차원에서는 약간 이상하지만 화면 공간에 물건을 배치하는 것이 더 합리적입니다.

3) 원한다면 할 수 있지만 고통스럽고 어색합니다. Z- 프로젝트를 모니터에 / 모니터에 익숙하게하는 것이 좋습니다.


1

1) 네, 당신의 관찰은 정확합니다.

2) 표준 글로벌 XYZ 좌표 시스템은 1 인칭 슈팅 게임의 관점에서 생각할 때 공백 (정체성) 변환 매트릭스로 장면의 캐릭터의 눈을 통해 볼 때 의미가 있습니다. 종이에 좌표계를 그릴 때와 마찬가지로 X는 오른쪽을 가리키고 Y는 위쪽을 가리 킵니다. 오른쪽 규칙 (x-> thumb, y-> index finger, z-> middle finger)에 따르면 Z는 사용자를 가리 킵니다.

3) 그것은 틀리지 않을 것이지만, 표준에서 벗어날 것입니다. 지금 당장 생각할 수있는 세 가지 문제가 있습니다. (a) 어느 날 표준 좌표 프레임을 사용하는 물리 라이브러리를 사용한다고 가정 해 봅시다. 당신이 표준을 따르지 않았다면, 이제 당신은 당신의 세계에서 물리 세계로가는 변형에 대해 생각해야합니다. 버그를 고치려고 할 때 성 가실 수 있습니다. (b) 누군가와 코드를 공유하거나 개발을 돕기 위해 누군가를 데려 오려면 대회에 익숙해 져야합니다. (c) 표준 3D 모델을 사용할 때는 옆으로 보지 않도록 항상 모델 위에 변형이 있어야합니다.

이제 질문 2에 추가하기 위해 X, Y 및 Z를 세 글자가 아니라 오른쪽, 위, 뒤로 생각하는 것이 유용합니다. 장면의 모든 문자에는 로컬 좌표계가 연결되어 있으며 로컬 좌표 프레임에서 X는 항상 옳고 Y는 위쪽이고 Z는 뒤쪽입니다. 이 작업을 마치면 인쇄 한 벡터를 이해하거나 의미있는 방식으로 알고리즘을 작성할 수 있습니다. 두 문자 A와 B가 있고 그 중 하나가 다른 쪽을 향하고있는 경우 무언가를하고 싶다고 가정 해 봅시다. A의 좌표 프레임 (Ta ^ -1 * p_b)에서 B의 위치를 ​​간단히 찾을 수 있습니다. 획득 한 벡터를보고 Z (뒤로)가 음이고 X (오른쪽) 및 Y (위)가 작은 지 확인하십시오. A와 관련하여 B의 오른쪽과 위쪽이 얼마나되는지 알려줍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.