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

게임 그래픽스/[전북대] OpenGL

게임 그래픽스/[전북대] OpenGL

[OpenGL Note] Rasterizer

Rasterizer 단계 Rasterizer 단계는 아래와 같은 역할을 수행한다 Clipping Clip Space에서 화면에 표시되는 영역을 벗어나는 부분을 제거하는 것을 의미한다 예를 들어, t1은 버려지고 t2는 통과가 되고 t3는 View Frustrum에 걸쳐지면서 Clipping이 된다 Perspective division homogeneous 좌표계인 Clip space 좌표를 Cartesian 좌표계로 바꾸는 작업을 의미한다 그 결과값을 NDC(normalized device coordinates)라고 한다 homogeneous 좌표계를 Cartesian 좌표계로 바꾸기 위해서는 w값인 -z로 나누게 된다 따라서, w(-z)값이 크면, 나머지 x, y, z 값은 작아지고 w(-z)값이 작으..

게임 그래픽스/[전북대] OpenGL

[OpenGL Note] Vertex Shader

Transform의 구분 World Transform은 각각 오브젝트가 고유의 변환을 한다 View Transform, Projection Transform은 모든 오브젝트가 공유하는 변환을 한다 Vertex Array Vertex Array는 position, normal, texture coordinates 등이 포함된다 Vertex Shader는 Vertex Array를 한 번에 병렬 연산으로 처리한다 Vertex Shader Input/Output Vertex Shader Input은 Attributes와 Uniforms로 구분된다 Attributes는 per-vertex data로 'in' 키워드를 사용한다 Uniforms는 per-object data로 'uniform' 키워드를 사용하고 Wo..

게임 그래픽스/[전북대] OpenGL

[OpenGL Note] Uniforms, VAO

Attributes와 Uniforms Attributes: per-vertex data(정점당 데이터)이다 주로 정점의 position, color, texcoord, normal 등의 정보를 포함한다 Attributes는 정점 배열(Vertex Array)에 저장되어 있으며, 셰이더 프로그램에서 정점 셰이더(Vertex Shader)에 의해 사용된다 Uniforms: per-object data(오브젝트당 데이터)이다 셰이더 프로그램의 모든 실행에 대해 일관된 값을 가지는 전역 변수로 주로 변환 행렬, 광원의 위치, 재질의 속성 등의 정보를 전달하는 데 사용되고 world matrix, view matrix, proj matrix가 포함된다 Uniforms는 셰이더 프로그램 내에서 모든 정점에 대해 동..

게임 그래픽스/[전북대] 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

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