glLoadIdentity ()는 OpenGL에서 무엇을합니까?


132

나는 OpenGL을 처음 접했고 코드에있는 모든 임의의 함수에 약간 압도적입니다. 그들은 효과가 있고 언제 사용해야하는지 알지만 왜 필요한지 또는 실제로 무엇을하는지 모르겠습니다.

나는 그것이 glLoadIdentity()현재 행렬을 항등 행렬로 대체 한다는 것을 알고 있지만 정확히 무엇을합니까? 모든 프로그램에 필요한 경우, 달리 지정하지 않는 한 기본적으로 ID 매트릭스가 아닌 이유는 무엇입니까? 내가하는 일을 모른다면 코드에 함수를 좋아하지 않습니다. 풍부한 2D 클라이언트 전용 OpenGL을 사용하고 있기 때문에 이것이 3D에게 매우 명백한 경우 무지를 변명 할 수 있습니다.

또한 glMatrixMode(GL_PROJECTION)VS 에 대해 약간 혼란 스럽습니다 glMatrixMode(GL_MODELVIEW).

답변:


139

투영 행렬과 모델 뷰 행렬의 관점에서 단위 행렬은 기본적으로 행렬을 기본 상태로 다시 설정합니다.

당신이 희망 알고로서 glTranslate그리고 glRotate항상 매트릭스의 현재 상태를 기준으로합니다. 예를 들어를 호출 glTranslate하면 원점이 아닌 행렬의 현재 '위치'에서 번역됩니다. 그러나 원점에서 다시 시작하려면을 호출해야합니다 glLoadIdentity(). 그러면 glTranslate이제 원점에 glRotate있는 행렬 또는 이제 기본 방향으로 향하는 행렬에서 할 수 있습니다.

Boon의 대답은 1과 같고 정확하게 정확하지 않다고 생각합니다. 행렬은 실제로 다음과 같습니다.

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

그것이 정체성 매트릭스입니다. Boon은 수학적으로, 그 행렬과 곱해진 행렬 (또는 그와 비슷한 행렬, 대각선, 0과 같은 행렬)이 원래의 행렬이 될 것이지만, 이것이 왜 중요한지를 설명하지는 않습니다.

이것이 중요한 이유는 OpenGL이 각 행렬을 통해 모든 위치와 회전을 곱하기 때문입니다. 예를 들어 다각형 ( glBegin(GL_FACE), 일부 점 glEnd())을 그리면 MODELVIEW와 곱하여 다각형 을 "월드 스페이스"로 변환 한 다음 PROJECT 행렬과 곱하여 3D에서 2D로 변환합니다. 픽셀을 그리는 데 사용하는 깊이 (화면 '카메라'의)와 함께 화면의 2D 포인트 그러나 이러한 행렬 중 하나가 항등 행렬 인 경우 점에 항등 행렬이 곱해 지므로 변경되지 않으므로 행렬이 적용되지 않습니다. 포인트를 번역하지 않고 회전시키지 않고 그대로 둡니다.

이것이 조금 더 명확 해지기를 바랍니다!


1
즉, OpenGL은 '마스터'또는 '글로벌'매트릭스를 유지하며, 이후의 각 매트릭스는 해당 '마스터'또는 '글로벌'매트릭스에 상대적으로 적용됩니다. 내가 맞아?
user366312

41

항등 행렬은 숫자의 1과 같습니다. 1과 곱하는 숫자는 그 자체입니다 (e.g. A x 1 = A).

matrix도 마찬가지입니다 ( MatrixA x IdentityMatrix = MatrixA).

따라서 항등 행렬을로드하는 것은 행렬을 행렬 스택에 곱하기 전에 행렬을 올바른 상태로 초기화하는 방법입니다.

glMatrixMode(GL_PROJECTION) : 원근 변환 또는 직교 변환에 사용되는 행렬을 처리합니다.

glMatrixMode(GL_MODELVIEW): 모델 뷰 변환에 사용되는 행렬을 처리합니다. 즉, 객체 (일명 모델)를 뷰 좌표 공간 (또는 카메라 공간)으로 변환합니다.


6

프로젝션 매트릭스는 시청 볼륨을 만드는 데 사용됩니다. 현실 세계의 한 장면을 상상해보십시오. 당신은 실제로 당신의 주위의 모든 것을 보지 못하고, 당신의 눈으로 볼 수있는 것만 볼 수 있습니다. 예를 들어 물고기라면 조금 더 넓은 것을 볼 수 있습니다. 우리가 투영 행렬을 설정한다고 말할 때 우리는 우리가 만든 장면에서보고 싶은 것을 설정한다는 것을 의미합니다. 세상 어디에서나 사물을 그릴 수 있습니다. 뷰 볼륨 안에 있지 않으면 아무것도 보이지 않습니다. 뷰 볼륨을 생성 할 때 시야를 정의하는 6 개의 클리핑 평면을 생성한다고 상상해보십시오.

모델 뷰 매트릭스는 세계의 모델 (객체)을 다양하게 변형하는 데 사용됩니다. 이와 같이 개체를 한 번만 정의한 다음 변환하거나 회전하거나 크기를 조정하면됩니다.

장면에서 객체를 그리기 전에 투영 행렬을 사용하여 뷰 볼륨을 설정합니다. 그런 다음 객체를 그리고 이에 따라 모델 뷰 행렬을 변경합니다. 예를 들어 장면을 그린 다음 텍스트를 그리려면 (직교 투영에서 더 쉽게 작업 할 수있는) 일부 텍스트를 그린 다음 모델 뷰 매트릭스로 다시 변경하려는 경우 모델을 그리는 도중에 행렬을 변경할 수 있습니다.

이름 modelview는 모델링 및보기 변환의 이중성과 관련이 있습니다. 카메라를 5 단위 뒤로 당기거나 물체를 5 단위 앞으로 움직이면 본질적으로 동일합니다.

희망 좀 빛을 비추다


2

항등 행렬은 행렬을 적절한 기본값으로 "초기화"하는 데 사용됩니다.

알아야 할 한 가지 중요한 점은 행렬 곱셈은 의미가 부가 적이라는 것입니다. 예를 들어, 항등 행렬로 시작하는 행렬을 가져와 회전 행렬에 곱한 다음 배율 행렬에 곱하면 곱한 행렬을 회전하고 축척하는 행렬로 끝납니다.


0

다른 사람들이 말한 것을 요약하면, 항등 행렬은 벡터 / 행렬에 곱할 때 결과가 동일한 벡터 / 행렬이되는 행렬입니다. 곱셈의 숫자 1과 덧셈의 숫자 0에 해당합니다.

glLoadIdentity ()는 더 이상 사용되지 않는 함수이므로 자신의 행렬을 관리하는 것이 좋습니다.


-1

glLoadIdentity() 이 기능은 프로젝션 모드에 들어갈 때마다 매트릭스가 항등 매트릭스로 재설정되어 새로운 시청 매개 변수가 이전 매개 변수와 결합되지 않도록합니다.

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