DirectX 9

[DX]##. 애니메이션 ( Animation )

* 애니메이션 ( ANIMATION ) 게임에서의 애니메이션은 어떻게 표현될까 ?? 그전에 사람이 정점으로 3D 에서 어떻게 표현되는지 알아보자. 게임 엔진에서 애니메이션을 실행하거나 Mesh 를 보면 많은 점들로 이루어진 사람 모양의 형태를 볼 수 있다. 흔히 이런 골격 표현을 "Skeleton" 이라 부르고 뼈에 해당하는 부위를 "Bone" 이라 부른다. * Skeleton 위 그림처럼 흔히 대자로 뻗은 사람 모형 Skeleton 을 형상할 때, "T-Poze 혹은 Bind Poze" 라고 부른다. 이 모형을 기준으로 우리는 골격을 이루는 뼈마다 해당 부분을 정점이라 생각하고 이 점들을 움직임으로써 인간 형태의 애니메이션을 적용할 수 있다. 이것은 컴퓨터에 정점을 표현해 어떤 물체를 그려내야하는 우리..

DirectX/개념 2022.12.28

[DX]##3. 원근 투영 ( Perspective Projection )

*Clip Space 대표적인 투영 방법으로는 원근 투영 / 직교 투영 이 존재한다. 이번 단원에서 원근 투영에 대해서 알아보자. *원근 투영 ( Perspective projection ) 원근법 ( 위키 ) 원근법에 대한 기본적인 방식은 먼 거리에 있는 물체가 더 작게 보이게 2D 화면에 나타내는 방식이다. 일반적인 예시로 원근법을 적용한 그림들을 쉽게 찾아볼 수 있다. 원근법을 적용한 그림들의 공통점은 '소실점의 존재' 이다. 이 소실점을 기준으로 일정 각도만큼의 직선들을 나란히 그리게되면 실제로 소실점에 가까운 부분들은 멀어보이게 되는 시각적 효과를 가져온다. 하지만, 3D 컴퓨터 환경에서 원근법을 적용하기 위해선 실제 그림에서 적용되는 방식과는 조금 다르다. 결론은 3D Rendering 에서는..

DirectX/개념 2022.12.16

[DX] ##8. FRUSTUM CULLING ( 절두체 선별 )

*FRUSTUM CULLING ( 절두체 선별 ) => 월드상의 모든 물체를 다 그리기엔 비용이 너무나도 크다. => 해당 영역 안에 있는 물체들만 랜더링한다. 저 사다리꼴 모형의 영역을 지정하기 위해서 총 6개의 평면을 정의하고 어떤 하나의 점이 모든 평면의 안쪽에 존재하는지 판별해야한다. 우선 우리는 평면방정식을 알아야한다. * 평면 방정식 * 평면 방정식에서 필요한 요소들은 무엇일까 ?? 1. 평면의 노말벡터 2. 원점과 평면과의 거리 '평면에 원점이 포함될 때' 평면 위의 두 벡터를 안다면 해당 두 벡터를 외적함으로써 우리는 노멀벡터를 구할 수 있다. 이 때, 우리는 한 가지 사실을 알 수 있다. " N • (dot) P1 = 0 " => 노말벡터와 평면 위의 벡터의 내적이 '0' 이라는 것은 서..

DirectX/개념 2022.08.25

[DX] ##7. GJK ( GILBERT-JOHNSON-KEERTHI ) Algorithm

* GJK Alogrithm SAT ( 분리축 이론 ) 과 더불어 다각형 충돌 처리에 쓰이는 알고리즘이다. SAT 보다 상대적으로 비용이 저렴하고 빠르다. 우선 대략적인 개념을 알아보고 어떤 식으로 구현할지 알아보자. * Minkowski Sum => 두 다각형을 그리는 정점들의 합한 벡터들의 모양을 그린다. ( 원점 기준 표현 ) * Minkowski Difference => 두 다각형을 그리는 정점들의 차인 벡터들의 모양을 그린다. ( 원점 기준 표현 ) => 원점이 포함되어진다면 두 물체는 overlap 되어진 상황. 즉, 정점들의 벡터 차를 원점 기준으로 그렸을 때, 도형이 원점을 포함한다면 겹쳐져있다는 개념을 활용해 두 물체의 겹쳐짐 여부를 판별 가능. 하지만, 원점 기준으로 물체를 그리는 연산..

DirectX/개념 2022.08.15

[DX] ##6. AABB, OBB 충돌 SAT 분리축 이론( Separating Axis Theorem )

Frustum Culling ( 절두체 선별 ) 에 앞서서 해당 범위에 오브젝트들이 포함되어있는지 어떻게 판별할까 ?? 그 방법에 대해서 몇 가지 알아보고 넘어가자. *AABB ( Axis - Aligned Bounding Box ) => 축 정렬 경계 상자 라고 한다. => 큰 특징은 사각 Box 영역이 좌표축에 평행. AABB 를 적용할 오브젝트의 최솟점 / 최댓점 을 구해 정의 가능하다. 최솟점(Vmin) / 최댓점(Vmax) 을 이용해서 AABB 의 중점(c) 과 거리(e) 를 구할 수 있다. c = 0.5 ( Vmin - Vmax ) e = 0.5 ( Vmax - Vmin ) *AABB 와 회전의 문제 => 좌표계 축을 기준으로 물체의 최솟점, 최댓점을 이용해 AABB 를 적용하는데, 월드 공간..

DirectX/개념 2022.08.05

[DX] ##5. 직교투영, Screen Space ( Window Space )

*Clip Space => 대표적인 투영 방법 원근 투영 / 직교 투영 *직교 투영 ( Orthogonal Projection ) => 평면상 수직으로 투영된다. => 원근감이 존재하지 않는다. => UI ( User Interface ) 를 랜더링할 때 많이 쓰임. @viewport width : w @viewport height : h @near plane : n @far plane : f * 직교 투영 행렬 => 직교 투영 행렬은 원근 투영 행렬보다 비교적 어렵지 않게 구할 수 있다. 몇 가지만 짚고 넘어가자. * 왜 2 / w , 2 / h 인가 ?? => 투영좌표계에선 x, y 가 (-1, 1) 이기 때문. 가운데 ( 0,0 ) 에서, x 기준 : 1,4 사분면 / 2,3 사분면 y 기준 : 1..

DirectX/개념 2022.08.02

[DX] ##4. Z-Fighting

* 투영행렬 ( Perspective Matrix ) 결과 g(z) = A + B / z g(n) = 0 g(f) = 1 을 이용해서 A,B 를 구할 수 있었다. 하지만, 항상 또 다른 문제가 발생하기 마련이다. 우리가 near, far 에 따라서 z 값을 [ 0~1 ] 사이의 값으로 맞추기 위해 만든 g(z) 함수 와 z 값 사이에 문제가 발생한다. *Z-Fighting ( 정밀도 문제 ) z ( 깊이 ) 의 낮은 정밀도로 인해서 물체가 겹쳐보이는 현상이 발생. 무슨말인가 ?? 위에서 우리가 구한 g(z) 함수는 '비선형' 함수 이다. 즉, 일차방정식처럼 일정한 방향으로 늘어나지 않고 이차함수처럼 곡선이다. 그래프를 참고하면 'near' 값이 엄청난 영향을 끼친다 는 사실을 알 수 있다. near 의 ..

DirectX/개념 2022.07.31

[DX] ##2. Local, World, View Space

*하나의 점이 화면에 보여지기까지의 과정 *LocalSpace => 어떤 점들을 원점을 기준으로 어디에 위치해있는지 표현하는 공간. => 점이 시작되는 좌표가 있는 공간. 즉, 초기 물체가 그려지는 공간. *WorldSpace => Local space 에서 그려진 물체를 크기,회전,위치를 가진 정보를 더해 Worldspace 공간으로 넘긴다. => 물체가 크기, 회전, 위치를 가지는 공간. 흔히 ' SRT ' 라고 부른다. => 물체마다 독립적인 World 행렬 존재 *Translation 행렬 => 이동행렬의 이동 값들은 마지막 4x4 마지막 줄에 정의되어진다. *Scale 행렬 => 벡터의 스케일을 키워주는 행렬 => 위치를 원점에 놓고 계산해야 물체 자체만을 키울 수 있음. => 그렇지 않으면 커..

DirectX/개념 2022.07.29

[DX] ##1. 좌표계 변환

*3D 그래픽스를 처음 접했을 때의 궁금증 *행렬을 사용하는 목적 => 3차원을 표현하기에 적합하다. => 선형변환을 적용할 수 있다. *선형변환이란 ?? 간단하게 설명하자면, 어떤 값 : A 라고 할때, A + ( 어떤 연산 ) = B 즉, A 에 어떤 연산 을 적용했을 때, 모든 계산된 값은 B 이어야 한다. 이 때, 어떤 연산을 '선형' 이라고 한다. 또, 이 과정을 '선형변환' 이라고 한다. 벡터는 크기를 늘이고 줄일 수 있다. 또한, 방향도 가지고 있다. 어떤 벡터를 어떤 점에 적용했을 때, 이동한 점을 알 수 있고 반대로 적용한 벡터를 알고 있다면, 다시 원래대로 되돌아올 수 있다. 즉, 벡터는 명백히 '선형' 이다. 따라서, 벡터는 선형이고 어떤 벡터들을 어떤 점이나 다른 벡터에 적용하는 것..

DirectX/개념 2022.07.28