본문 바로가기

전체 글84

[Game] 충돌 (2) 객체의 축이 평행한 경우의 충돌은 단순하게 구현할 수 있다. 만약, 회전을 통해 객체의 축이 평행하지 않은 경우에는 어떻게 구현을 해야 할까? OBB 회전을 하게 되면 두 객체의 축이 평행하지 않게 된다. 이 경우에는 다음과 같은 과정이 이어진다. 1. 두 객체의 중점을 잇는 차이 벡터를 구한다. 2. 네 개의 축 중 하나의 축의 단위벡터와 차이 벡터를 내적하여 절댓값을 찾는다. (a) 3. a와 같은 방향을 가지는 단위벡터와, 객체의 중점에서부터 스케일값만큼 뻗어진 가로 벡터, 세로 벡터를 찾는다. (b) 4. a와 b 과정에서 나온 4개의 절댓값을 더한 값을 비교하여 a가 더 크다면 충돌하지 않은 것, b가 더 크다면 충돌한 것으로 판정한다. 5. 단, 이 과정을 총 네 번 반복하고 모두 만족해야 완.. 2023. 1. 16.
[Game] 충돌 특정 오브젝트가 다른 오브젝트와 충돌을 했을 때, 이를 어떻게 확인하면 좋을까? 우선 단순하게는 해당 객체의 좌표가 다른 객체의 좌표와 겹쳐졌을 때 반응을 일으키면 된다. 충돌을 판정하는 알고리즘의 종류는 몇 가지가 있다. 1) 픽셀 픽셀은 좌표이다. 때문에 특정 픽셀이 어떤 객체와 충돌하였는지를 판별하기 위해선 간단한 코드만 있다면 충분하다. bool IntersectRectCoord(Object rect, Vector2 pixel) { if(rect.GetWorldPos().x + Rect.scale.x * 0.5f < pixel.x && rect.GetWorldPos().x - Rect.scale.x * 0.5f < pixel.x && rect.GetWorldPos().y + Rect.scale.y.. 2023. 1. 13.
[DirectX] 렌더링 파이프라인 - (2) IA 단계에서 각 정점들의 정보와 그림을 그리는 방법에 대해서 저장한 버퍼를 생성해서 결과물을 만들었다. 그렇다면 이후에는 이 결과물을 다음 단계인 VS 단계로 넘겨주어야 한다. 하지만 바로 넘겨주게 되면 VS에선 이 결과물을 제대로 읽어들이지 못한다. hlsl로 작성한 VS 단계에 입력되는 매개변수의 자료형이다. 그리고 우리가 IA 단계에서 입력한 VertexBuffer에는 정점의 정보가 담겨 있다. 이 정점의 정보를 VS에서 읽어들일 수 있게 변화를 해주어야 한다. 이때 IA에서 바인딩되어야 하는 정보가 바로 InputLayout이다. 이 안에는 VS가 읽어들일 수 있는 정보로 자료를 구분해주는 역할을 한다. 위에 VertexInput 내부에 float4 자료형으로 선언된 변수들이 실제 VS 단계에서.. 2023. 1. 6.
[DirectX] 셰이더(Shader) 셰이더라고 부르는 것은 무엇일까? 책에서 정의하는 바는 다음과 같다. '3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수 혹은 알고리즘' '3D에서 원래 Vertex의 위치를 변경하거나 재질의 색상에서 다른 색상으로 변경하는 모든 행위' 쉽게 말하자면 정점을 움직이거나 색의 농담, 색조, 명함 효과를 주는 주체라는 뜻이다. 이런 셰이더에는 CG, HLSL, GLSL 등의 언어가 존재한다. 셰이더는 렌더링 파이프라인의 대부분의 단계에서 사용이 된다. 1) Vertex Shader(정점 셰이더) - 점 단위에서 연산을 하는 셰이더이다. 2D, 3D 모두 점, 선, 면으로 이루어질 수밖에 없는데, Vertex(점) 단위에서 x, y, z 좌표를 움직이거나, 색상을 바꾸는 등의 계산을.. 2023. 1. 4.