OpenGL Space 개념
Local Space / World Space / View Space / Clip Space / Screen Space
좌측부터 OpenGL 좌표계에 가까운 단계이며, 우측인 Screen Space는 말 그대로 우리가 컴퓨터 화면을 통해 보는 스크린의 좌표계이다. 이번 글에서는 이 공간들에 대해 차근차근 알아보자.
아래 그림에서 좌표계의 축들은 실제 OpenGL 축과 밀접한 관련은 없으니 그냥 이해를 위해 보도록 하자.

Local Space
가장 첫번째 단계인 Local Space다. 나의 object의 시작 단계라고 보면 된다. object의 시작 단계라고 생각하니, object를 구성하는 모든 점들의 좌표가 (0, 0, 0)으로 이해하니 이상하다. 필자의 해석으로는 '관찰자'가 없는 단계라고 생각했다. 즉, 누가 보고 있지 않으니, 상대적으로 좌표가 성립될 수가 없고, 그래서 그냥 기준이 (0, 0, 0)이구나!라고 이해한 정도이다. 더 나은 설명이 있다면 댓글 부탁드립니다.
World Space
Local Space와 가장 큰 차이점은 관찰자, 즉 그림에 나와있다시피, 카메라가 있다는 점이다. 관찰자가 있으니, 관찰자를 기준으로 상대적인 좌표가 정해진다. Local Space에서 World Space로 넘어올 때, Model Matrix를 거친다. 이 Model Matrix를 통한 변환으로 (matrix multiplication, 선형 대수학..!) object들의 위치가 정해진다. Roate(회전), translate(평행이동) 등등.
View Space
카메라 라고 보면 된다. '보면 된다'라는 말이 헷갈릴 수 있다. 사실, OpenGL은 카메라라는 개념이 없고, 관찰자(window)는 고정되어 있지만, object들이 움직여서 우리에게 다르게 보일 뿐이다. 마치 우리가 집 안에서 창문을 통해 밖을 보면 자동차, 구름이 지나가는 걸 볼 수 있듯이. OpenGL에서 그걸 해주는 게, World Space에서 View Space로 넘어오면서 행렬곱을 하는 View Matrix이다. Rotate, translate 등등.
Clip Space
창문으로 밖을 볼 때, 한정된 부분만 보이듯이, OpenGL에서도 마찬가지다. 우리가 object들을 다 그려도, 보이지 않는 부분이 존재한다. 그런 부분을 그리지 않아도 된다고 명시하면 GPU가 고마워한다. 이 Clip(자름)을 해주는 게 View Space에서 Clip Space로 넘어갈 때 행렬곱을 하는 Projection Matrix이다. OpenGL이 clip할 영역을 정하는 기준은 각 x, y, z 축에 대하여 -1.0 ~ +1.0 사이에 속하는지에 대한 여부이다. 그런데, 우리가 object을 그릴 때, -1.0 ~ +1.0 사이의 소수점으로 그리게 되면 얼마나 불편한가? 그래서 View Space까지 -1000 ~ +1000 범위를 사용하며, 우리가 설정한 Projection Matrix를 통해 -1.0 ~ +1.0으로 변환하여 자른다.
Screen Space
Clip Space를 통해 볼 영역이 정해지고 나면, 우리가 볼 screen을 설정해야 한다. 가장 편한 방식으로는 glViewport 함수를 사용하면 되며, 실제 우리가 보는 컴퓨터의 화면에 어떻게 표시될지, window에서 얼만큼의 영역을 차지하는지 등 실제 컴퓨터 화면과 관련된 좌표이며 우리가 보는 화면이다.
종합
Model Space = Model Matrix * Local Space
View Space = View Matrix * Model Matrix * Local Space
Clip Space = Projection Matrix * View Matrix * Model Matrix * Local Space
Screen Space = Viewport Transform to Clip Space.
OpenGL 좌표축 방향
화면 정중앙을 (0,0,0)이라고 한다면, z축은 화면에서 수직으로 나오는 방향, x축은 (0, 0, 0)에서 오른쪽으로 뻗는 방향, y축은 (0, 0, 0)에서 위로 뻗는 방향이다. 어떠한 변환도 하지 않았을 때, 관찰자는 (0,0,0)에서 -z 축 방향으로 OpenGL의 공간을 보게 된다.

'Computer Science > Graphics' 카테고리의 다른 글
OpenGL 1. Introduction (0) | 2023.08.08 |
---|
OpenGL Space 개념
Local Space / World Space / View Space / Clip Space / Screen Space
좌측부터 OpenGL 좌표계에 가까운 단계이며, 우측인 Screen Space는 말 그대로 우리가 컴퓨터 화면을 통해 보는 스크린의 좌표계이다. 이번 글에서는 이 공간들에 대해 차근차근 알아보자.
아래 그림에서 좌표계의 축들은 실제 OpenGL 축과 밀접한 관련은 없으니 그냥 이해를 위해 보도록 하자.

Local Space
가장 첫번째 단계인 Local Space다. 나의 object의 시작 단계라고 보면 된다. object의 시작 단계라고 생각하니, object를 구성하는 모든 점들의 좌표가 (0, 0, 0)으로 이해하니 이상하다. 필자의 해석으로는 '관찰자'가 없는 단계라고 생각했다. 즉, 누가 보고 있지 않으니, 상대적으로 좌표가 성립될 수가 없고, 그래서 그냥 기준이 (0, 0, 0)이구나!라고 이해한 정도이다. 더 나은 설명이 있다면 댓글 부탁드립니다.
World Space
Local Space와 가장 큰 차이점은 관찰자, 즉 그림에 나와있다시피, 카메라가 있다는 점이다. 관찰자가 있으니, 관찰자를 기준으로 상대적인 좌표가 정해진다. Local Space에서 World Space로 넘어올 때, Model Matrix를 거친다. 이 Model Matrix를 통한 변환으로 (matrix multiplication, 선형 대수학..!) object들의 위치가 정해진다. Roate(회전), translate(평행이동) 등등.
View Space
카메라 라고 보면 된다. '보면 된다'라는 말이 헷갈릴 수 있다. 사실, OpenGL은 카메라라는 개념이 없고, 관찰자(window)는 고정되어 있지만, object들이 움직여서 우리에게 다르게 보일 뿐이다. 마치 우리가 집 안에서 창문을 통해 밖을 보면 자동차, 구름이 지나가는 걸 볼 수 있듯이. OpenGL에서 그걸 해주는 게, World Space에서 View Space로 넘어오면서 행렬곱을 하는 View Matrix이다. Rotate, translate 등등.
Clip Space
창문으로 밖을 볼 때, 한정된 부분만 보이듯이, OpenGL에서도 마찬가지다. 우리가 object들을 다 그려도, 보이지 않는 부분이 존재한다. 그런 부분을 그리지 않아도 된다고 명시하면 GPU가 고마워한다. 이 Clip(자름)을 해주는 게 View Space에서 Clip Space로 넘어갈 때 행렬곱을 하는 Projection Matrix이다. OpenGL이 clip할 영역을 정하는 기준은 각 x, y, z 축에 대하여 -1.0 ~ +1.0 사이에 속하는지에 대한 여부이다. 그런데, 우리가 object을 그릴 때, -1.0 ~ +1.0 사이의 소수점으로 그리게 되면 얼마나 불편한가? 그래서 View Space까지 -1000 ~ +1000 범위를 사용하며, 우리가 설정한 Projection Matrix를 통해 -1.0 ~ +1.0으로 변환하여 자른다.
Screen Space
Clip Space를 통해 볼 영역이 정해지고 나면, 우리가 볼 screen을 설정해야 한다. 가장 편한 방식으로는 glViewport 함수를 사용하면 되며, 실제 우리가 보는 컴퓨터의 화면에 어떻게 표시될지, window에서 얼만큼의 영역을 차지하는지 등 실제 컴퓨터 화면과 관련된 좌표이며 우리가 보는 화면이다.
종합
Model Space = Model Matrix * Local Space
View Space = View Matrix * Model Matrix * Local Space
Clip Space = Projection Matrix * View Matrix * Model Matrix * Local Space
Screen Space = Viewport Transform to Clip Space.
OpenGL 좌표축 방향
화면 정중앙을 (0,0,0)이라고 한다면, z축은 화면에서 수직으로 나오는 방향, x축은 (0, 0, 0)에서 오른쪽으로 뻗는 방향, y축은 (0, 0, 0)에서 위로 뻗는 방향이다. 어떠한 변환도 하지 않았을 때, 관찰자는 (0,0,0)에서 -z 축 방향으로 OpenGL의 공간을 보게 된다.

'Computer Science > Graphics' 카테고리의 다른 글
OpenGL 1. Introduction (0) | 2023.08.08 |
---|