카메라 대신 세상을 움직이는 이유는 무엇입니까?


87

OpenGL 게임에서 플레이어를 움직이게하는 것은 카메라를 움직이는 것이 아니라 전 세계를 움직이는 것입니다.

예를 들어 다음은이 튜토리얼의 추출입니다. OpenGL View matrix

실제로는 특정 장면의보기를 변경하기 위해 카메라를 이동하는 데 익숙합니다. OpenGL에서는 다른 방법입니다. OpenGL의 카메라는 움직일 수 없으며 음의 Z 방향을 향한 (0,0,0)에 위치하도록 정의되어 있습니다. 즉, 카메라를 움직이거나 회전시키는 대신 월드를 이동하고 카메라 주위를 회전하여 적절한 뷰를 구성합니다.

왜 그렇게합니까?


1
카메라는 프로젝션 뷰만 나타냅니다. 그래서 당신은 당신이 원하는 투영을 얻기 위해 세상을 변화시킵니다. 개념은 이상하지만 실제로는 의미가 있습니다 ... 어떻게

@sharethis, 나는 더 나은 설명으로 대답을 향상시켰다. 수학 및 3D 카메라 (가상 카메라) 옵션으로 투영 원근법을 추가했습니다. 당신과 다른 사람들에게 도움이 될 수 있습니다.
Md Mahbubur Rahman

4
두 가지 작업 (카메라 이동 또는 세계의 개체)이 대칭이기 때문에 실제로 어떤 작업이 수행되었는지 알 수있는 방법이 없습니다. 당신은 세상을 카메라에 대해 움직이는 것에 대해 생각하고 있지만, 다른 사람이 세상에 대해 반대 방향으로 움직이는 카메라를 시각화 할 수 있습니다 ... 좋아요, 객체를 서로에 대해 상대적으로 움직일 수 있으므로 한 가지 방법이 더 직관적 일 수 있습니다. 사람이 "잘못", 상황을 시각화하는 두 가지 방법이 다른 상황에서 좋습니다. 종종 둘 다 생각하는 것이 도움이됩니다.
user3728501

답변:


72

왜 ?

카메라는 프로젝션 뷰를 나타 내기 때문입니다.

그러나 3D 카메라 (가상 카메라)의 경우 카메라가 세상 대신 움직입니다. 이 답변의 뒷부분에 자세한 설명을했습니다.

수학적으로 이해

투영 뷰는 공간 주위를 이동하고 방향을 변경합니다. 가장 먼저 알아 두어야 할 것은 화면의 원하는 투영이보기 방향으로 변경되지 않는다는 것입니다.

이러한 이유로 우리는 다른 것을 변형시켜 원하는 투영을 얻습니다.

http://opengl.org 에서 이해하기

카메라가 움직이는 것처럼 보이게하려면 OpenGL 응용 프로그램이 카메라 변환의 역으로 ​​장면을 이동해야합니다. OpenGL과 관련하여 카메라가 없습니다. 보다 구체적으로, 카메라는 항상 눈 공간 좌표 (0, 0, 0)에 위치합니다.

http://open.gl 에서 이해

또한 http://open.gl/transformations의 View matrix 부분 에서 다음 줄을 공유하고 싶습니다.

카메라 변환을 시뮬레이션하려면 실제로 그 변환의 역으로 ​​세상을 변환해야합니다. 예 : 카메라를 위로 움직이려면 세상을 아래로 움직여야합니다.

관점으로 이해

실제 세계에서는 "관점"이라는 방식으로 사물을 봅니다.

원근은 더 멀리있는 물체가 더 가까운 물체보다 작게 보이는 개념을 나타냅니다. 원근법은 또한 직선 도로 중앙에 앉아있는 경우 실제로 도로의 경계선을 두 개의 수렴 선으로 본다는 것을 의미합니다.

그것은 관점입니다. 관점은 3D 프로젝트에서 중요합니다. 원근법이 없으면 3D 세계는 실제처럼 보이지 않습니다.

이것은 자연스럽고 명백해 보일 수 있지만 컴퓨터에서 3D 렌더링을 만들 때 컴퓨터 화면 (2D 표면)에서 3D 세계를 시뮬레이션하려고 시도하는 것을 고려해야합니다.

컴퓨터 화면 뒤에는 실제 3D 장면이 있으며 컴퓨터 화면의 "유리"를 통해보고 있다고 상상해보십시오. 원근법을 사용하여 목표는 화면 뒤에이 실제 3D 세계가있는 것처럼 화면의 "유리"에 "투영"되는 것을 렌더링하는 코드를 만드는 것입니다. 유일한 경고는이 3D 세계가 현실이 아니라는 것입니다. 그것은 단지 3D 세계의 수학적 시뮬레이션 일뿐입니다.

따라서 3D 렌더링을 사용하여 3D에서 장면을 시뮬레이션 한 다음 3D 장면을 화면의 2D 표면에 투영 할 때이 프로세스를 원근 투영이라고합니다.

달성하고자하는 것을 직관적으로 구상하여 시작하십시오. 객체가 뷰어에 더 가까이 있으면 객체가 더 커야합니다. 물체가 더 멀리 있으면 더 작아야합니다. 또한 객체가 뷰어에서 직선으로 멀리 이동하는 경우 거리가 멀어 질수록 화면 중앙을 향해 수렴되기를 원합니다.

관점을 수학으로 변환

다음 그림에서 그림을 볼 때 물체가 3D 장면에 있다고 가정하십시오. 3D 세계에서, 물체의 위치는 시점에서 원점을 갖는 3D 좌표 시스템을 참조하여 xW, yW, zW로 기술 될 수있다. 화면 너머의 3D 장면에서 객체가 실제로 위치하는 곳입니다.

여기에 이미지 설명을 입력하십시오

시청자가이 객체를 화면에서 볼 때 3D 객체는 화면의 2D 좌표계 (투영 평면)를 참조하는 xP 및 yP라고하는 2D 위치로 "투영"됩니다.

이 값을 수학 공식에 넣으려면 월드 좌표에 3D 좌표계를 사용합니다. 여기서 x 축은 화면에서 오른쪽, y는 위쪽, 양수는 z를 가리 킵니다. 3D 원점은 시청자의 눈의 위치를 ​​나타냅니다. 따라서 화면의 유리는 z 축과 직교하는 평면 (직각)에 z 축으로, z는 zProj라고합니다.

다음과 같이 월드 위치 xW와 yW를 zW로 나누어 투영 위치 xP와 yP를 계산할 수 있습니다.

xP = K1 * xW / zW
yP = K2 * yW / zW

K1 및 K2는 투영 평면 (뷰포트)의 종횡비 및 눈의 "시야"와 같은 기하학적 요소에서 파생 된 상수로, 광각 비전의 정도를 고려합니다.

이 변환이 원근을 시뮬레이션하는 방법을 볼 수 있습니다. 눈과의 거리 (zW)가 증가함에 따라 화면 측면 근처의 점이 중앙을 향해 밀리 게됩니다. 동시에, 중심 (0,0)에 더 가까운 점은 눈으로부터의 거리에 의해 훨씬 덜 영향을 받고 중심에 가깝게 유지됩니다.

z에 의한이 구분은 유명한 "관점 분할"입니다.

이제 3D 장면의 객체가 일련의 꼭짓점으로 정의되어 있다고 가정합니다. 따라서 이러한 종류의 변형을 모든 지오메트리의 정점에 적용하면 객체가 시점에서 멀어 질 때 수축되도록 효과적으로 할 수 있습니다.

다른 중요한 경우

  • 3D 카메라 (가상 카메라)의 경우 카메라가 월드 대신 이동합니다.

3D 카메라를 더 잘 이해하려면 영화를 촬영한다고 가정 해보십시오. 촬영하려는 장면을 설정해야하며 카메라가 필요합니다. 푸티지를 얻으려면 카메라를 사용하여 장면을 로밍하면서 장면의 객체를 다른 각도와 관점에서 촬영합니다.

3D 카메라에서도 동일한 촬영 프로세스가 수행됩니다. 생성 한 "가상"장면을 돌아 다닐 수있는 "가상"카메라가 필요합니다.

인기있는 두 가지 촬영 스타일에는 캐릭터의 눈 (일인칭 카메라라고도 함)을 통해 세상을 보거나 캐릭터를 카메라로 향하고 시야를 유지하는 것 (타사 인 카메라라고 함)이 포함됩니다.

이것은 3D 카메라의 기본 전제입니다. 3D 장면을 로밍하고 특정 시점에서 푸티지를 렌더링하는 데 사용할 수있는 가상 카메라입니다.

세계 공간 및보기 공간 이해

이러한 종류의 동작을 코딩하려면 3D 월드의 내용을 월드 좌표계의 관점이나 다른 고정 된 관점에서가 아니라 카메라의 관점에서 렌더링합니다.

일반적으로 3D 장면에는 3D 모델 세트가 포함됩니다. 모델은 자체 좌표계를 참조하여 정점 및 삼각형 세트로 정의됩니다. 모델이 정의 된 공간을 모델 (또는 로컬) 공간이라고합니다.

모델 객체를 3D 장면에 배치 한 후에는 "세계 변형"행렬을 사용하여 이러한 모델의 정점을 변형합니다. 각 객체에는 객체의 월드 위치와 방향을 정의하는 자체 월드 매트릭스가 있습니다.

이 새로운 참조 시스템을 "월드 공간"(또는 글로벌 공간)이라고하며,이를 관리하는 간단한 방법은 월드 변환 매트릭스를 각 객체에 연결하는 것입니다.

3D 카메라의 동작을 구현하려면 추가 단계를 수행해야합니다. 세계를 기준으로하지 말고 3D 카메라 자체의 기준 시스템을 참조하십시오.

좋은 전략은 카메라를 3D 세계에서 실제 3D 객체로 취급하는 것입니다. 다른 3D 객체와 마찬가지로 "세계 변형"매트릭스를 사용하여 3D 세계에서 원하는 위치와 방향으로 카메라를 배치합니다. 이 카메라 월드 변환 매트릭스는 카메라 오브젝트를 원래의 전방 회전 (z 축을 따라)에서 실제 월드 (xc, yc, zc) 위치 및 월드 회전으로 변환합니다.

다음 그림은 월드 (x, y, z) 좌표계와 뷰 (카메라) (x ', y', z ') 좌표계 간의 관계를 보여줍니다.

여기에 이미지 설명을 입력하십시오


5
다른 답변이 있습니다. 직접 편집 할 필요는 없습니다.
Jesse Dorsey

1
@Noctrine, 감사합니다. 페이지 간 연결을 만드는 방법을 알지 못했습니다.
Md Mahbubur Rahman

"다음 단원에서는 Flash 3D 프로젝트에서 사용할 수있는이 투시 투영 수식을 ActionScript에 사용합니다." 원래 질문에 Flash 3D 프로젝트에 대한 언급이 없기 때문에 소스를 인용하면 다른 곳에서 복사하여 붙여 넣은 것으로 생각합니다.
Gilles

@Gilles, 내 실수로 죄송합니다. 내 답변을 편집했습니다. 여러 출처를 연구하면서 답을 준비했습니다. 당신이 지적한대로 당신에게 많은 감사합니다. :)
Md Mahbubur Rahman

그 주 glMatrixMode()와에서 언급되는 몇 가지 더 많은 기능 : eng.utah.edu/~cs6360/Lectures/frustum.pdfopengl.org/archives/resources/faq/technical/viewing.htm는 사용되지 않습니다. 그러나 수학적 설명은 정확하고 도움이됩니다.
patryk.beza

28

Mahbubar R Aaman의 대답은 매우 정확하고 그가 제공하는 링크는 수학을 정확하게 설명하지만 기술 / 수학적 대답이 덜 필요한 경우 다른 접근법을 시도합니다.

현실 세계와 게임 세계에서 물체의 위치는 일부 좌표계로 정의됩니다. 좌표계는 위치 값에 의미를 부여합니다. 내가 "100,50"이라고 말하면 그 숫자의 의미 (마일, 킬로미터, 위도 및 경도 등)가 무엇인지 알지 않는 한 도움이되지 않습니다. 이들이 직교 좌표 인 경우 ( "일반적인"종류의 좌표), 상대 좌표가 어떤 원점인지 알아야합니다. "동쪽으로 100 피트"라고 말하면 좌표 원점이라고하는 "East of what "을 알아야 합니다.

이것을 쉽게 생각할 수있는 방법이 있습니다. "기차역은 도시의 남서쪽 모퉁이에서 북쪽으로 3km, 동쪽으로 1.5km 떨어져 있습니다." 당신은 또한 누군가에게 "기차역은 내가 지금있는 곳에서 바로 북쪽으로 1 마일"이라고 말할 수 있습니다. 두 좌표가 모두 정확하고 동일한 랜드 마크의 위치를 ​​식별하지만 다른 원점에서 측정되므로 숫자 값이 다릅니다.

3D 응용 프로그램에는 일반적으로 "세계"좌표계가 있으며, 이는 게임에서 카메라와 물체의 위치를 ​​나타내는 데 사용되며 임의의 디자이너 지정 원점 (일반적으로 모든 레벨의 중심)으로 직교 좌표로 측정됩니다. 또는 재생중인지도). 카메라가 원점에있는 직교 좌표계와 같은 다른 좌표계가 게임에 존재합니다. 언제든지 원하는 방식으로 새로운 좌표계를 정의 할 수 있으며, 3D 시뮬레이션에서는 수학을보다 쉽게 ​​수행 할 수 있도록 매우 자주 수행됩니다.

실제로 개별 삼각형을 화면에 렌더링하는 알고리즘은 특정 방식으로 작동하므로 렌더링 할 때 절대 좌표를 직접 사용하는 것이 편리하지 않습니다. 수학은 "객체가 세계 중심의 오른쪽에 100 단위"라는 정보를 다루기 위해 실제로 설정되지 않았습니다. 대신 수학은 "객체가 카메라 바로 앞에 있고 20 단위 떨어진 곳에 있습니다." 따라서 렌더링 월드 수학에 추가 단계가 추가되어 오브젝트 월드 위치를 가져 와서 카메라 좌표계로 변환합니다.

물론 카메라의 위치와 방향도 있습니다. 따라서 물체가 20,100,50 위치에 있고 카메라가 10,200, -30에 있으면 카메라를 기준으로 한 물체의 위치는 10,100,80입니다 (물체의 위치에서 카메라의 위치를 ​​뺀 위치). 게임에서 카메라가 움직이면 월드 좌표에서의 카메라 위치가 예상대로 정확하게 이동합니다.

개체는 이동 하지 않습니다 . 그들은 이전의 위치에 그대로 머물러 있습니다. 그러나 현재 위치는 다른 좌표 원점을 기준으로 표현되고 있습니다. 객체의 월드 좌표는 객체 자체가 움직이는 경우에만 이동하지만 카메라 위치는 카메라의 위치를 ​​기준으로하기 때문에 카메라가 움직일 때마다 변경됩니다.

인용하는 튜토리얼의 설명은 간단한 설명이며 OpenGL의 기능에 대한 정확한 설명은 아닙니다. 나는이 기사의 저자가 그것을 이해하지 못했다고 생각하지 않는다. 저자는이 경우에 혼란을 없애기보다는 혼란을 야기하는 단순화 된 유추를 사용하려고했다.

수학이 카메라 좌표에 관심을 갖는 이유를 이해하는 데 도움이 더 필요한 경우,이 연습을 시도해보십시오. 엄지 손가락과 집게 손가락을 만지고 손을 잡고 사각형을 만들고 ( "뷰포트"라고 함) 방을 둘러보십시오. 개체를 찾아서 본 다음 둘러보고 직접 보지 마십시오. 그렇게하면 스스로에게 "내 뷰포트의 오브젝트는 어디에 있습니까?"라고 스스로에게 물어보십시오. 이 물체는 지구상의 특정 위치를 찾아내는 데 사용할 수있는 실제 경도와 위도를 가지고 있지만 현재보고있는 것에 대해 아무 것도 알려주지 않습니다. "객체가 내 뷰포트의 왼쪽 상단 모서리에 있고 약 2 미터 정도 떨어져있는 것 같습니다"라고 말하면 꽤 많은 것을 알 수 있습니다. 머리와 방향을 기준으로 좌표계를 만들었습니다. 그것은 당신의 비전에 따라 물체의 위치를 ​​정의합니다. 이것이 기본적으로 OpenGL / Direct3D의 삼각형 래스터 라이저 부분에 필요한 것입니다. 그리고 수학의 목적은 객체의 위치와 방향을 편리한 세계 좌표에서 카메라 좌표로 변환해야합니다.


나에게 수학적 설명이 명확하고 이해하기 쉽지만 이것은 또한 훌륭한 설명입니다! 나는 당신이 같은 질문으로 많은 사람들을 도왔다 고 믿습니다.
danijar

카메라가 움직이는 지 세상을 명확하게하기 위해 +1은 당신이 말하는 좌표계의 기능 일뿐입니다.
David Moles

11

Mahbubur R Aaman이 언급 한 "카메라가 없다"는 점에서 다른 두 가지 (우수한)를 추가하는 것만으로도 좀 더 정교 해집니다.

"카메라"가 실제로 존재하지 않기 때문에 이것은 사실이며 일반적인 "카메라"비유의 실패를 나타냅니다. 카메라 비유는 바로 그 비유라는 것을 인식하는 것이 중요합니다. 실제로 배후에서 작동하는 방식을 설명하지는 않습니다.

따라서이 물건을 처음 접했을 때 머리를 숙이는 데 도움이되는 수단으로 보아라.

이제 여기에 관련된 두 가지 클래스의 객체가 있습니다 : 관점과 세계의 모든 것. 뷰 포인트를 일부 객체에 더 가깝게 이동하려고하지만이 이동의 경우 뷰가 객체에 더 가깝게 이동하는지 또는 객체가 뷰에 더 가깝게 이동하는지에 관계없이 최종 결과는 동일합니다. 당신이하고있는 모든 것은 그들 사이의 거리를 바꾸는 것입니다. 현재 거리가 X이고 새 거리가 Y가되기를 원하기 때문에 이동 후 새 거리가 Y 인 한 이동 거리는 중요하지 않습니다. 따라서 전혀 움직이지 않습니다. 그냥 거리를 바꾸고 있어요 (나는 이것으로 모든 아인슈타인을 다룰 의향이 없었습니다 ... 정직한!)

그러나 카메라가 존재하지 않기 때문에 거리를 변경할 수있는 것은 물체뿐입니다. 따라서 객체의 거리를 변경하면 결과는 동일합니다. 어쨌든 모든 객체가 변환을 거치기 때문에 더 이상 저렴하지 않습니다.

간단한 수학적 설명이 도움이 될 수 있습니다. 모든 좌표가 1D 인 것처럼 가정합니다. 관측점이 0에 있고 객체가 4에 있고 관측점이 3으로 가고자합니다. 즉, 객체 간의 거리가 4 (4-0)에서 1 (4- 삼). 그러나 카메라가 존재하지 않으므로 0을 변경할 수 없습니다. 항상 0이됩니다. 따라서 3에 0을 더하는 대신 (할 수없는) 4에서 3을 뺍니다 (할 수있는 것). 이제 객체는 1에 있고 최종 결과는 매우 같습니다. 관점과 객체는 1입니다.


카메라는 존재하지 않지만 변환하기 전에 카메라의 위치를 ​​계산할 수 있습니다. 그러나 어떤 경우에는 (축이 정렬되지 않은 평행 투영) "무한대"(양수 또는 음수)의 일반 좌표 중 둘 이상으로 변환 행렬보다 덜 유용합니다.
Martin Sojka

7

카메라를 움직이거나 세상을 움직이는 것은 똑같은 두 가지 유효한 선택입니다. 하루가 끝나면 한 좌표계에서 다른 좌표계로 변경됩니다. 위의 답변은 정확하지만 시각화 방법은 동일한 동전의 양면입니다. 변환은 어느 쪽이든 갈 수 있습니다-그것들은 서로의 역수입니다.

렌더링 프로세스의 일부는 월드 좌표에서 눈 좌표로 변환됩니다. 그러나이를 모델링하는 쉬운 방법은 애플리케이션의 가상 카메라 객체를 사용하는 것입니다. 카메라는 투영 행렬 (투시 효과를 담당)과 월드 공간에서 눈 공간으로 변환하는 데 사용되는 뷰 매트릭스를 모두 나타낼 수 있습니다.

따라서 정점 셰이더는 뷰 매트릭스를 사용하여 지오메트리의 좌표를 눈 공간으로 변경하지만 뷰 월드를 다시 계산할 때 가상 세계를 이동하는 카메라 객체를 생각하는 것이 더 쉽습니다.

따라서 응용 프로그램에서 카메라를 월드 좌표로 이동하고, camer'as 뷰 매트릭스를 업데이트하고, 새로운 뷰 매트릭스를 버텍스 쉐이더에 균일하거나 블록의 일부로 전달하고 장면을 렌더링합니다.


5

나는 그것이 결함이있는 유추라고 대신 주장했다. 가장 기본적인 "카메라 이동"과 "세계 이동"은 정확히 동일한 수학적 구성입니다. 세계를 움직이는 것은 개념적으로, 특히 계층 적 변환에 대해 생각하는 것이 다소 쉽다는 것입니다. 기본적으로 월드 버텍스를 카메라의 좌표 공간으로 변환한다는 점에서만 카메라 주위의 세상을 움직이고 있지만 이것은 가역적 인 아핀 변환입니다.

그러나 가시성을 결정하기 시작하면 마지막으로해야 할 일은 카메라 주변의 전 세계를 번역하는 것입니다. 대신, 대부분의 경우 (특히 고정 BSP 등의 전형적인 경우) 세계에서 카메라 위치를 사용하여 가시성 구조를 쿼리하여 가시성있는 것을 결정한 다음 THOSE 만 번역합니다. 카메라의 좌표 공간에


4

나는 그 주장이 게임에서 월드 좌표를 거의 "이동"하는 것이 아니라 실제로 가상 카메라의 좌표를 변경하기 때문에 주장이 범주 적으로 사실이라고 생각하지 않습니다.

카메라의 개념은 유한 시야 절두체를 8 개의 코너 포인트 (또는 6 개의 평면의 교차로 정의)가있는 잘린 피라미드로 단위 큐브로 변환하여 OpenGL의 마지막 단계에서 클립 공간을 나타냅니다. 렌더링 파이프 라인.

그런 의미에서 월드는 움직이지 않지만 클립 공간의 좌표계에서 월드 좌표 만 계산합니다.


2

카메라를 움직이거나 세계를 움직이는 것은 똑같이 유효한 두 가지 선택입니다. 하루가 끝나면 우리는 한 좌표계에서 다른 좌표계로 변경합니다. 변환은 어느 쪽이든 갈 수 있습니다-그것들은 서로의 역수입니다.


2

여기에 좋은 답변이 많이 있습니다. 나는 그들 중 어떤 것도 반복하지 않도록 노력할 것이다. Direct3D와 같은 방식으로 카메라 측면에서 생각하기가 더 쉬운 경우가 있습니다 (참고 : 9.0c 이후로 많이 재생하지 않은 경우).

푸투 라마 (Futurama)의 의미에서와 같이 "세계를 움직이는 것"은 인용 된 사람이 그것을 보는 매우 좋은 방법이라고 말합니다 ( "엔진은 배를 전혀 움직이지 않습니다. 그것!"). 이것은 실제로 2D 게임에서 일반적이었습니다. 말 그대로 조정하기 어려운 뷰포트가 있으며 때로는 비디오 RAM 또는 UI 창이었습니다. 이런 이유로 OpenGL이 그렇게한다면 말하기 어려울 것입니다.

확실히 카메라 측면에서 2D 모션을 생각할 수 있으며 그러한 종류의 사고 과정만으로도 효과를 쉽게 파악할 수 있습니다.


1
늦었지만 좋은 대답도!
danijar

감사! 나는 검색 엔진을 통해 발견 된 페이지에 대한 토론에 추가하는 것이 특히 정보가 편리하거나 흥미있는 경우에 특히 높이 평가되는 것으로 나타났습니다
Joe Plante

2

OpenGL 문서 작성자부터 시작하여 여기에 오해가 많이있는 것 같습니다 ...

저를 신속하게 정신을 복원하자 세계는 움직이지 않는 이 머물러. 플레이어를 움직일 때 세상을 구현하려는 사람은 멀티 플레이어 모드에서 빠르게 문제를 일으 킵니다. 각 플레이어의 움직임에서 전 세계 수백만 (또는 수십억) 객체의 위치를 ​​업데이트하면 게임 플레이가 다소 느려질 것입니다 ...

그렇다면 실제로 무슨 일이 일어나고, 그 견적은 어떻게 되나요?

우선 좌표계의 개념을 이해해야합니다. 일반적으로, 세계에서 한 점을 선택하고이를 "원점", 즉 좌표가 (0,0,0) 인 점으로 선언합니다. 또한 X, Y 및 Z라고하는 세 가지 "기본"방향을 선택합니다. 좌표 시스템을 지정하는 방법에는 여러 가지가 있습니다. 일반적으로 하나의 "세계 좌표 시스템"이 있으며이 시스템에는 세계가 고정되어 있습니다 (더 많거나 적음). 게임에서이 시스템은 레벨 디자이너가 선택합니다.

이제 플레이어의 눈에 연결된 다른 좌표계를 고려하는 것이 편리합니다. 이 좌표계에서 플레이어는 항상 좌표 (0,0,0)에 있으며 세계는 그 주위를 이동하고 회전합니다. 따라서 플레이어의 좌표계에서 만들어진 것으로 이해하면 따옴표가 정확합니다 .

그러나 월드는 플레이어의 좌표에서 작동하지 않고 월드의 좌표에서 작동합니다. 두 좌표계가 관련되는 경우 항상 한 종류의 좌표를 다른 좌표로 변환하는 방법이 있습니다. OpenGL에서 이것은 4x4 뷰 매트릭스를 사용하여 수행됩니다.

궁극적으로 플레이어가 움직일 때 플레이어는 움직이면서 세계는 움직이지 않습니다. 이것은 월드 좌표에 있으며, 오브젝트가 게임에 저장되는 방식입니다. 플레이어는 그와 관련된 뷰 카메라를 가지고 있으며,이 카메라는 전 세계에서 비슷하게 움직입니다 (OpenGL 문서가 말하는 것처럼 보이지만). 그러나 사용자 화면에 세계를 표시하기 위해 모든 보이는 객체의 좌표를 변형 행렬을 사용하여 플레이어의 좌표계로 변환 한 다음 추가 투영을 적용하여 원근 효과를 만듭니다. 이 플레이어의 좌표 시스템에서 세계는 실제로 플레이어 주위를 움직이는 것처럼 보입니다. 그러나 그것은 그것에 대해 매우 도움이되지 않고 혼란스런 생각입니다.


" OpenGL 문서 작성자부터 시작 " " OpenGL 제작자들이 세상 의 표현 (모든 OpenGL이 관심을 갖는)과 그 세상 의 개념적 표현 ( OpenGL이 다루는 것이 아닙니다).
Nicol Bolas 13:25에

" 그러나 그것은 그것에 대해 매우 도움이되지 않고 혼란스러운 생각 일뿐입니다. "그것은 또한 진실 입니다. 그리고 진실은 거짓말보다 항상 더 도움이됩니다. 조만간 그 거짓말이 당신을 따라 잡을 것이고 당신은 진실에 직면해야 할 것입니다.
Nicol Bolas 13:25에
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.