Model View Projection Matrix의 목적


102

어떤 목적으로 Model View Projection Matrix를 사용합니까? 셰이더에 모델 뷰 투영 행렬이 필요한 이유는 무엇입니까?


12
이 링크를 확인하십시오 : songho.ca/opengl/gl_transform.html
iKushal

3
저는 Computer Graphics 전용 Stack Exchange 사이트를 열 것을 제안했고이 질문을 예제 질문 으로 선택했습니다 . 시작되는 사이트를보고 싶다면 computergraphics.stackexchange.com을 팔로우 하세요!
dec

답변:


196

모델, 뷰 및 프로젝션 행렬은 세 개의 개별 행렬입니다. 모델은 객체의 로컬 좌표 공간에서 월드 공간으로 매핑하고, 월드 공간에서 카메라 공간으로, 카메라에서 화면으로 투영합니다.

세 가지를 모두 구성하는 경우 하나의 결과를 사용하여 개체 공간에서 화면 공간까지 매핑 할 수 있으므로 들어오는 정점 위치에서 프로그래밍 가능한 파이프 라인의 다음 단계로 전달하는 데 필요한 사항을 파악할 수 있습니다.

예전의 고정 기능 파이프 라인에서는 모델과 뷰를 함께 적용한 다음 그로부터 파생 된 다른 결과를 사용하여 조명을 해결했습니다 (예를 들어 오브젝트에 스케일링을 적용한 경우에도 노멀이 여전히 단위 길이가되도록 일부 수정). ) 다음 투영을 적용합니다. OpenGL에 반영되어 모델과 뷰 매트릭스를 분리하지 않고 단일 모델 뷰 매트릭스 스택으로 유지합니다. 따라서 때때로 셰이더에 반영되는 것을 볼 수 있습니다.

따라서 구성된 모델 뷰 투영 행렬은 셰이더에서 각 모델에 대해로드 한 정점에서 화면으로 매핑하는 데 자주 사용됩니다. 필수는 아닙니다. 똑같은 것을 달성하는 많은 방법이 있습니다. 가능한 모든 선형 변환을 허용하기 때문에 일반적인 것입니다. 그 때문에 덜 구성된 버전도 예전의 고정 파이프 라인 세계에서 표준이되었습니다.


3
그래서 여러 객체 (메쉬)의 경우 여러 modelView 행렬이 필요합니다.
Yuriy Vikulov 2011

5
그들이 독립적으로 움직일 수 있거나 따로 배치되었다고 가정하면 그렇습니다. 이것이 가장 일반적인 진행 방법입니다. CPU의 현재 모델에 대해 설정 한 후 modelView 또는 projectionModelView를 셰이더 프로그램에 균일하게 전달합니다.
Tommy

안녕하세요 Tommy, 가능하다면이 모델 뷰 프로젝션 매트릭스를 사용하여 Android의 Opengl Es2.0에서 팬 기능에 대한 샘플 코드를 제안 할 수 있습니까? 내가 ... 내가 나를 위해 이해하기 쉬운, 어떤 샘플 코드 수단 idea.if 명확한 가져올 수 없습니다, 더 많은 링크를 주심을
하리 크리슈 난

1
질문이 있습니다. MV 행렬을 하나로 사용하는 openGL의 경우 카메라 공간에서 세계 공간으로 이동하려면 inverse (projection matrix * view matrix) * (cursor position) 필요하지만 model-view가 하나의 구성된 matrix. 해당 계산에 뷰 매트릭스를 사용할 수 있도록 모델과 뷰 매트릭스를 어떻게 분리합니까? 그래서 따로 보관해야하나요?
Evren Bingøl 2013

@ EvrenBingøl 아직 답을 얻었습니까? 내 모델과 뷰 매트릭스를 별도로 유지했지만 계속해서 분리 해야하는지 여부를 묻는 질문에 대한 실제 답변을 알고 싶습니다.
tom_mai78101

9

행렬이 편리하기 때문입니다. 행렬은 서로 다른 공간에 대한 위치 / 방향을 변환하는 데 도움이됩니다 (3 개의 수직 축과 원점으로 공간을 정의 할 수 있음).

다음은 주석에 @ legends2k가 지정한 책의 예입니다.

Cartesia의 주민들은 도시의지도를 사용합니다. 원점은 도시의 중심을 상당히 현명하게 중심으로하고 축은 나침반의 기본 지점을 따라 향합니다. 난독증의 주민들은 임의의 지점을 중심으로 한 좌표와 그 당시 좋은 생각으로 보였던 임의의 방향으로 움직이는 축이있는 도시지도를 사용합니다. 두 도시의 시민들은 각각의지도에 매우 만족하지만, 주 교통 엔지니어는 Cartesia와 Dyslexia 사이의 첫 번째 고속도로에 대한 예산을 실행하는 작업을 할당했습니다. 두 도시의 세부 정보를 보여주는지도가 필요하므로 세 번째 좌표를 도입합니다. 그 누구보다 우월한 시스템입니다.

여기 또 다른 예가 있습니다.

세계 좌표를 사용하여 정점 위치가있는 게임에서 자동차 오브젝트를 만들었다 고 가정합니다. 완전히 다른 세계의 다른 게임에서이 같은 차를 사용해야한다고 가정하면 위치를 다시 정의해야하며 계산이 복잡해질 것입니다. 새로운 세계와 관련하여 차 안에서 창, 후드, 헤드 라이트, 바퀴 등의 위치를 ​​다시 계산해야하기 때문입니다.

모델,보기 및 투영의 개념을 이해하려면 비디오를 참조하십시오 . (추천)

그런 다음 이것을 보고 세계의 정점이 행렬로 표현되는 방식과 변형되는 방식을 이해합니다.


깊이 생각하면 변형이 객체의 원점 (즉, 단일 점)을 기반으로하지만 객체의 모든 정점 (공식적으로 메시 / 모델)이 변형을 거치게됩니다. 즉, 모든 1000 개의 정점이 곱해질 것입니다. 모델 매트릭스에 의해. 따라서 귀하의 요점은 제대로 구성되지 않았습니다. 모델 행렬은 단순히 모델 공간의 정점을 월드 공간으로 변환하는 행렬입니다. 여기에는 성능상의 이점이 없으며 단지 편리합니다.
legends2k

그렇다면 왜 단일 3D 공간의 모든 지점을 나타내지 않습니까? 당신이 :) 다른 이동 장면에 입력 할 수있는 또 다른 장면 장면의 출력을 사용하면 혜택이 있어야한다
cegprakash

1
세상과 같은 더 큰 공간보다 상대적인 공간에서 작업하는 것이 편리하기 때문에 단일 공간의 모든 정점을 나타내는 것은 아닙니다. 로봇이 2 미터 앞으로 이동하라는 명령을 받았을 때 세계의 중심을 찾은 다음 정확한 결과 좌표를 계산하는 것보다 눈으로하는 것이 더 적절하다고 가정 해 보겠습니다.
legends2k

당신이 옳다고 생각합니다. 어쨌든 모든 픽셀에 대해 fragment shader가 호출 될 것이며 복잡한 메시의 경우 모든 픽셀에 대해 행렬 곱셈을 수행 할 것입니다. : |
cegprakash

2
조각 셰이더에서는 조명 / 색상 계산 만 수행되며 데이터가 조각 셰이더에 도달 할 때까지 모든 위치 계산이 완료됩니다 (예 : 정점 셰이더에서). 다중 좌표계를 사용하는 이유에 대한 더 나은 설명은 여기에 있습니다 . 이 책은 훌륭한 3D 게임 수학 자료입니다. 책의 웹 사이트에서 샘플 PDF와 같은 장 .
legends2k
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.