묻공러
'그래픽스/[전북대] OpenGL' 카테고리의 글 목록 (2 Page)

그래픽스/[전북대] OpenGL

그래픽스/[전북대] OpenGL

[OpenGL Note] Projection Transform

Projection Transform View Frustrum 공간을 2*2*2 공간으로 변환하는 것을 의미한다 perspective projection (원근 투영) Projection Transform을 하게 되면 멀리 있는 물체는 작아지고 가까이 있는 물체는 커지면서 원근 투영이 적용된다 그리고 해당 변환은 affine 변환의 특징인 평행의 속성이 유지되지 않기에 마지막 행에 (0, 0, 0, 1)이 고정되지 않는다 Projection Matrix Projection Matrix는 2가지 종류의 수식으로 구분되는데 fovy, aspect, n , f를 활용하는 수식은 아래와 같다 left, right, top, botton, n, f를 활용하는 수식은 아래와 같다 To LHS OpenGL의 경우는 ..

그래픽스/[전북대] OpenGL

[OpenGL Note] View Frustrum

RHS vs. LHS View Transform에서 물체의 배치가 같다고 하더라도 오른손 법칙과 왼손 법칙 중 어떤 것을 선택하느냐에 따라서 물체의 배치가 달라진다 따라서, 서로 다른 법칙을 사용하는 모델링 툴과 게임엔진이 있다면 물체의 배치를 동일하게 하기 위해서는 오브젝트들의 z좌표들과 View Transform의 z좌표들을 negate 해줘야 하고 모델링 툴에는 Forward(ex. -Z)와 Up(ex. Y)을 직접 설정해 주는 기능이 대부분 있다 View Frustrum의 핵심 external parameter에는 EYE, AT, UP internal parameter에는 fovy, aspect, n, f가 있다 fovy는 field of view in y-direction이다 aspect는 wi..

그래픽스/[전북대] OpenGL

[OpenGL Note] View Transform

View Transform World Space에 있는 오브젝트 들을 카메라를 기준으로 좌표 변환하는 과정을 의미한다 View Transform의 핵심 View Transform의 핵심은 EYE, AT, UP이 있다 EYE는 카메라의 원점(origin)을 의미한다 AT은 오브젝트의 정점이 카메라를 향해 쳐다보는 지점을 의미한다 UP은 카메라의 업벡터를 의미한다 View Transform의 과정 1) Camera의 Eye를 World Space의 origin으로 이동한다 이동하는 과정에서 Camera의 Eye와 AT은 같이 움직인다 2) 축회전행렬을 통해 Camera의 Eye를 World Space의 origin을 동일하게 맞춘다 View Matrix 위의 View Transform 과정을 거치면 아래와 ..

그래픽스/[전북대] OpenGL

[OpenGL Note] World Transform

World Transform Object Space에 있는 오브젝트를 World Space의 좌표로 변환하는 과정을 의미한다 World Transform의 주의점 World Transform을 통해 다양한 L, T 변환 등이 진행되는데 만약 그 과정에서 non-uniform scaling이 적용되었다면, normal 벡터가 찌그러지는 문제가 발생한다 이를 해결하기 위해서는 노멀은 벡터이기 때문에 이동과 무관하기에 T는 제외하고 노멀과 노멀의 L 역행렬에 Transpose한 값과 곱을 하면 된다 non-uniform scaling인지 분기를 나누어 처리하는 것은 비효율적이기에 항상 World Transform에서 해당 처리를 진행한다

그래픽스/[전북대] OpenGL

[OpenGL Note] 3D Transform

3D Scaling 좌표 하나가 추가된 것으로 아래와 같은 연산을 통해 변환을 할 수 있다 3D Rotation 어느 축을 기준으로 회전하느냐에 따라 연산이 달라진다 기준 축의 좌표는 변하지 않는 것이 특징이다 회전의 방향 및 각도의 증가는 오른손 법칙(CCW)을 따른다 3D Translation Homogeneous Coordinate를 통해 행렬의 곱셈을 통해 연산한다 3D Affine Transform 아핀 변환으로 구성된 행렬을 아무리 많은 변환을 하더라도 그 결과는 L과 T로 구성되고 마지막 행은 (0, 0, 0, 1)로 구성된다 축회전행렬 object space basis를 u, v, n (모두 단위 벡터이다) world space basis를 e1, e2, e3라고 한다면, 아래와 같은 결과..

그래픽스/[전북대] OpenGL

[OpenGL Note] Affine Transform, Rigid Transform

Affine Transform 아핀 변환은 Linear의 S, R과 T로 구성되어 있다 Affine Transform의 특징 1) 아핀 변환된 행렬 간의 곱셈의 결과는 아핀 변환의 행렬이다 2) 아핀 변환된 행렬의 마지막 행은 (0, 0, 1)로 고정되어 있다 3) L과 T의 형태로 구성된다 4) L에는 Linear Transform(S와 R)의 정보가 포함되고 T에 대한 정보는 포함되어 있지 않다 5) T에는 T에 대한 정보가 포함되어 있고 Linear Transform(S와 R)의 정보가 포함될 수도 있다 정확하게는, TR 순서의 곱셈은 T RT 순서의 곱셈은 T, R SRT 순서의 곱셈은 T, S, R이 포함되어 있다 6) 아무리 복잡한 아핀변환 행렬 연산이 수행되어도 결과는 반드시 L과 T의 구조..

그래픽스/[전북대] OpenGL

[OpenGL Note] 2D Transform

Scaling Scaling은 uniform scaling과 non-uniform scaling으로 구분되고 아래와 같은 연산을 통해 Scaling 변환이 가능하다 Rotation 아래와 같은 연산을 통해 Rotation 변환이 가능하고 CCW 기반으로 각도가 증가한다 위의 연산은 기준점이 원점인 경우에만 가능하다 따라서, 기준점이 다른 경우에는 1) 기준점을 원점으로 이동시킨다 (Translating) 2) 회전한다 (Rotating) 3) 1번에서 차이가난 만큼 다시 해당 좌표를 이동시킨다 (Back-Translating) Translation Scaling과 Rotation은 행렬의 곱으로 연산이 되지만 Translation(이동) 변환도 행렬의 곱으로 연산하기 위해서 Homogeneous Coor..

그래픽스/[전북대] OpenGL

[OpenGL Note] 렌더링 파이프라인

렌더링 파이프라인 렌더링 파이프라인의 핵심적인 4단계는 위와 같다 vertex shader, fragment shader는 개발자가 직접 처리해야한다 rasterizer, output merger는 GPU가 정해진 규칙에 따라 자동으로 처리해준다 Vertex Shader Vertex Shader 단계에서는 정점들의 좌표계 변환이 핵심이다

그래픽스/[전북대] OpenGL

[OpenGL Note] 모델링

Polygon Mesh 구를 모델링하는 경우 두 가지 방식으로 구현할 수 있다 Implicit representation으로는 원의 방정식을 통해 구현한다 Explicit representation으로는 Polygon Mesh (특히, Triangle)를 통해 구현한다 모델링 툴에서는 Quad mesh를 일반적으로 사용하기 때문에 해당 Quad를 두 개의 Triangle로 변환해서 사용한다 완전하게 부드러운 구의 형태는 Implicit 방식이 더욱 가깝지만 GPU의 빠른 병렬 연산에 효율적인 Explicit 방식을 사용한다 LOD(Levels Of Detail) 모델을 폴리곤 메쉬의 정점 개수에 따라서 여러 버전을 만드는 것으로 멀리 있는지 가까이 있는지에 따라서 LOD를 적용한다 Vertex Array..

그래픽스/[전북대] OpenGL

[OpenGL Note] 기초 수학

행벡터(Row Matrix)와 열벡터(Column Matrix) OpenGL은 열벡터(Column Matrix)를 사용하고 DirectX는 행벡터(Row Matrix)를 사용한다 전치행렬 행렬의 행과 열을 서로 바꾼 행렬이다 단위행렬 오른 대각선으로 1이 작성된 행렬로 그 어떤 행렬과 곱해도 기존 행렬에 영향을 주지 않는다 역행렬 곱해서 단위행렬이 나오는 행렬을 의미한다 행렬의 법칙 행렬의 곱셈에서 교환법칙은 성립하지 않는다 행렬의 곱셈에서 결합법칙은 성립한다 벡터의 길이 벡터의 유클리디안 거리/길이는 ||v||로 표현하고 벡터를 길이로 나누는 것을 정규화라고 한다 정규화된 벡터는 길이가 1이고 단위 벡터라고 표현한다 좌표계 좌표계는 origin(원점)과 basis(기저)로 나타낸다 같은 위치라도 좌표계..