[ 컴퓨터 그래픽스 ] Open GL의 개념을 정리해보기.
∇ Open GL의 개념 정리.
목 차
1. OpenGL이란?
2. OpenGL의 장단점.
3. Legacy OpenGl vs Mordern OpenGL
4. OpenGL의 세부 개념들.
1. Open GL이란?
√ Open GL.
- OpenGL이란, "Open Graphics Library"로 Graphics 프로그래밍을 위한 API입니다.
( 이름과 다르게, Library가 아닌 API )
- OS는 OpenGL 인터페이스를 제공하고, GPU는 OpenGL implementation인 그래픽 카드 드라이버를 제공합니다.
예를 들어, 윈도우 운영 체제에서는 opengl32.dll을 제공하고, GPU는 Nvidia driver 등을 제공합니다.
√ 참고 : Library vs API 의 차이점 비교.
∵ Library.
- Collection of functions, pre-copiled routines or reusable components of code
= > 코드 그 자체를 모아 놓은 것.
- 코드의 반복을 줄이고 재사용을 할 수 있도록 합니다.
- 프로그래밍 속도를 단축시킬 수 있습니다.
∵ API [ Application Programming Interface ].
- Collection of software protocols
= > 인터페이스를 모아 놓은 것.
- 라이브러리들로 구성되어 만들어졌을 수도 있습니다.
- a set of tools and protocols prescribed by a computer operating system
or another app by which a developer writing a program can make request
2. Open GL의 장단점.
∇ 장점.
- 크로스 플랫폼 활용 : Windows, OS X, Linux, ios, Android 등 플랫폼에 구애받지 않고 OpenGL를 사용 가능.
- Language Independent : C, Python, Java, JavaScript 등 많은 언어에서 활용 가능합니다.
∇ 단점.
- Only Drawing things.
- Low-level drawing operation에서 강력한 기능을 보입니다.
- Creating windows, OpenGL contexts, handling events 등을 처리할 수 없습니다.
- 다른 기능을 수행하기 위해 다른 utility library가 필요합니다.
- GLFW, FreeGLUT : OpenGL을 위한 Utility Library
- Fltk, wxWidgets, Qt, Gtk
- 범용적인 GUI framework
- 강력하지만 OpenGL을 학습하기 위해서는 무거운 면이 있습니다.
3. Legacy OpenGL vs Mordern OpenGL
∇ Legacy OpenGl
- Fixed-function hardware만 사용할 수 있을 때 개발되었습니다.
- Shader를 사용할 수 없습니다.
- Shader: 소프트웨어 명령의 집합으로 주로 그래픽 하드웨어의 렌더링 효과를 계산하는데 쓰입니다.
- 배우기에 쉽고 빠른 프로토타입의 개발에 적합하지만 OpenGL 3.0 이후로는 업데이트 X.
- 전망이 어둡다, 점점 없어질 전망.
∇ Mordern OpenGL
- 현재의 하드웨어 수준에서 개발이 되었습니다.
- Shader를 사용할 수 있습니다.
- 더 유연하고 강력하지만 프로그래밍이 Legacy OpenGL에 비해서는 어렵습니다.
4. OpenGL의 세부 개념들
4 -1. 정점( Vertext )
- 좌표이며 색상정보를 가지고 있습니다.
- 2D는 x,y / 3D는 x,y,z로 표시되며
색상은 RGBA(red, green, blue, alpha) 로 표시됩니다.
4 -2. 폴리곤 ( Polygon )
- 정점을 연결해서 만든 면( ex. 3개를 연결하면 삼각형 )
- 폴리곤 매쉬(Polygon Mesh)
- 폴리곤이 모여있는 집합. 흔히 Mesh라 불림.
4 -3. 쉐이더( Shader )
- 정점을 바탕으로 화면을 그려주는 프로그램 코드.
- 정점 쉐이더(Vertex Shader)와 프레그먼트 쉐이더(Fragement Shader)가 있습니다.
- 정점 쉐이더(Vertex Shader)
- 정점의 최종 위치를 계산하는 역할
- 정점마다 한 번 씩 실행되며 정점이 모여 점,선,면을 이루게 됩니다.
- 프레그먼트 쉐이더(Fragment Shader)
- 정점 쉐이더로 생성된 점, 선, 면(삼각형)의 최종 색상을 계산.
각 프레그먼트마다 한 번 실행됩니다.
4 -4. 래스터화(Rasterization)
- 정점 쉐이더를 통해 변환된 데이터를 프레그먼트 쉐이더에서 처리할 수 있도록
데이터를 변환해주는 작업.
- 정점 쉐이더로 만들어진 면은 래스터화를 거쳐 프레그먼트 쉐이더에서 색상이 생성.
4 -5. 텍스쳐(Texture)
- 화면에 그려질 이미지 데이터, 쉐이더를 거쳐 화면에 그려집니다.
4 -6. 렌더링 파이프라인(Rendering Pipeline)
- 데이터가 정점에서부터 시작되어 면이 되고, 색상이 입혀져 화면에 그려지기 까지의 처리과정.
4 -7. 벡터 ( Vector )
하나의 정점은 하나의 벡터로 표현 될 수 있으며 방향이나 크기를 나타낼 수 있습니다.
- 방향 : 원점에서 벡터(50,50,0)까지의 방향
- 거리 : 원점에서 벡터(50,50,0) 까지의 거리.
OpenGL에서 vec3는 부동소수점(x,y,z)를 의미하고
vec4는 부동소수점(x,y,z,w)를 의미함.
여기서 w는 동차좌표로 나타내기 위해 사용합니다.
√ 동차좌표 ( Homogeneous Coordinates )
- 벡터(x,y,z)는 위치를 뜻하기도 하지만, 방향을 뜻하기도 합니다.
- 위치값인지 방향값인지 구별하기 위해 생겨난 것이 w가 있는 동차좌표입니다.
- w=1 이면, (x,y,z,1)는 공간상에서의 위치.
- w=0 이면, (x,y,z,0)는 방향.
- 표현 시 w값이 1인 이유는 x, y, z 값이 나중에 w로 나뉘게 되는데 해당 값이 1이어야 값이 변하지 않기 때문.
- 동차좌표는 벡터(x, y, z)를 4x4 매트릭스와 곱하기 위해 요소를 늘려주는 용도로도 사용함.
4 -8. 매트릭스(Matrix)
- 3차원 이미지를 2차원 평면에 그려내기 위해 사용되는 행렬입니다.
- OpenGL은 4*4 정방행렬을 주로 사용합니다.
오브젝트를 인터렉션하게 움직이게 하기 위해선 정점(Vertex)을 수정하고 버퍼를 재구성 해야합니다.
이를 위해 사용되는 것이 매트릭스입니다.
매트릭스를 벡터와 곱하게 되면 새로운 벡터값을 만들 수 있습니다( 곱하는 순서가 중요!)
√ 단위 행렬 ( Identity Matrix)
임의의 벡터를 행렬과 곱해도 벡터가 변하지 않는 행렬을 단위행렬이라고 합니다.
벡터(x,y,z,w)를 매트릭스와 곱해도 여전히 (x,y,z,w,)이므로 위 행렬은 단위 행렬.
√ 평행이동 행렬(Translation Matrix)
정점을 어느 방향으로 이동 시킬 수 있는 행렬.
위 행렬은 x,y,z 값을 입력하면 해당 값만큼 x,y,z 축으로 이동시킬 수 있습니다.
위 예시의 경우 정점(10,10,10)을 x 방향으로 10만큼 이동시킨 결과.
√ 확대/축소 행렬(Scaling Matrix)
벡터값을 확대/축소 시킬 수 있는 행렬.
위 행렬의 x,y,z 값에 값을 넣으면 해당 값 만큼 x,y,z 축으로 확대/축소 시킬 수 있습니다.
√ 회전 매트릭스 ( Rotation Matrix )
- 벡터 값을 삼각함수를 통해 한 축을 기준으로 회전시킬 수 있는 행렬.
- 한 축을 기준으로 어느 각(쎄타)만큼 이동시킬 때 아래와 같은 매트릭스가 사용됩니다.
오브젝트를 x,y,z 축으로 모두 회전 시킬 때,
위에서 구한 행렬 값을 순서대로 곱하면 됩니다 ( 오일러 값) - 순서 매우 중요.
x,y,z,축은 서로 종속적이기 때문에 한 축이 회전할 때 다른 축에도 영향을 줍니다.
곱하는 순서에 따라서 최종 방위가 달라지기 때문에 순서를 지켜야 합니다.
일반적으로 ZXY(Roll - Pitch - Yaw) 또는 XYZ 회전이 주로 사용됩니다.
4 -9. MVP 매트릭스( MVP Matrix)
3D 공간에서 오브젝트를 표현하기 위한 매트릭스, Model - View - Projection의 약자.
√ Model
- 그리고자 하는 대상인 물체, 위 사진상의 구체들.
√ View
- Model을 바라보는 시점 ( = 카메라 )
√ Projection
- 카메라가 모델을 볼 수 있는 화각, 카메라에서 뻗어나가는 사각뿔 모양의 절두체가 Projection임
프로젝션은 2가지.
- Perspective Projection
: 원근법을 적용하여 모델을 표현, 사람의 눈으로 보는 것과 동일,
- Orthograpic Projection
: 프로젝션 안의 모든 모델들을 원근감 없이 표현,
왜곡이 없기 때문에 압축해서 보여주는 느김이 듬.
4 -10. MVP 매트릭스 사용 예시.
OpenGL은 가로가 넓은 스크린 비율에 매핑시 우측 사진처럼 왜곡이 발생하게 됩니다.
MVP 매트릭스를 통해 이 왜곡을 교정 할 수 있습니다.
10.1. Model
삼각형이 원점에 위치하므로 Model을 움직일 필요가 없음 > 단위행렬 지정.
10.2. View
카메라도 원점에 있으면 삼각형을 보기 힘드므로 z 축으로 일정거리 멀어져야 함.
10.3. Projection
선택사항이나 일반적인 Perspective로 지정.
10.4. MVP 적용
- 10.4.1. MVP 계산
mvp = p v m (곱하는 순서 중요함)
Matrix.multiplyMM(vpMatrix, 0, projectionMatrix, 0, viewMatrix, 0);
- 10.4.2. 정점쉐이더에 적용
'3D Web Developer > computer_graphics' 카테고리의 다른 글
[ 컴퓨터 그래픽스 ] OpenGL : Image Formation & Graphics pipeline (1) | 2024.10.19 |
---|---|
[ 컴퓨터 그래픽스 ] 웹 GL(Web GL) 이란 (0) | 2024.10.14 |
[ 컴퓨터 그래픽스 ] 웹 그래픽이란 무엇인가? ( WebGL, OpenGL, WebGPU ) (4) | 2024.10.13 |