본문 바로가기

전체 글

(104)
[게임 수학] 아핀조합, 픽셀화, 브레젠험 알고리즘 목표아핀 조합으로 점들의 덧셈이 가능하고, 같은 직선상에 위치한다.아핀 조합에서 스칼라 값에 따른 직선의 종류(픽셀화) 데카르트 좌표계와 스크린 좌표계의 차이브레젠험 알고리즘들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 아핀 공간 인프런 강의 중 이득우의 게임 엔진을 지탱하는 게임 수학을 참고하여 작성되었습니다. 아핀 조합 (Affine Combination)아핀 조합이란? 아핀공간에서 점들의 덧셈이 점이 되는 특수한 환경을 만족하는 점들의 집합 점 + 점은 아핀 공간을 벗어남으로 불가능하다는 것을 알고 있다. (마지막 차원이 2가 됨.)그러나 스칼라를 보조로 사용해 마지막 차원의 값을 1로 만든다면 아핀 공간에서 점의 조합이 가능하다. 아핀 조합의 전개 과정$$a(x_{..
[DirectX 이론] Z-Fighting (ft. 근평면, 원평면) 목표z-fighting과 해결방법정밀도와 원 평면-근 평면의 관계들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 깊이 버퍼 Z-Fighting (스티칭, 플레인파이팅)Z-Fighting이란?3D 렌더링에서 두 개 이상의 프리미티브가 카메라와 매우 비슷한 거리를 가질 때출력 우선순위가 계속 변해서 깜빡이는것 처럼 보이는 현상(사진 출처: [Graphics] Z Fighting의 원인과 해결법)Z-Fighting이 왜 발생하는가?일반적으로 깊이 버퍼의 깊이값은 소수점을 표현할 때 사용하는 부동 소수점(또는 고정 소수점 반올림)으로 인해표현하는 소수점 이하의 값이 정확한 값이 아닌 근삿값이라는데에서 발생한다. 즉, 깊이 버퍼의 제한된 정밀도로 인해 유사한 위치의 깊이값을 가진 두..
[그래픽스] 직교 투영 (ft. 투영 행렬을 항등 행렬로 했을 때 비교) 목표 들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 직교 투영 (Orthogonal Projection)직교 투영이란? (정사영, 평행 투영)거리에 따른 크기나 길이의 왜곡을 만들지 않고 그대로 투영할 때 사용되는 투영법 직교 투영 함수D3DXMatrixOrthoLH 함수의 모든 매개 변수는 카메라 공간의 거리이다.매개변수는 뷰 볼륨의 차원을 설명한다.일반적으로 NearZ가 FarZ보다 작으나, FarZ가 NearZ보다 작도록 대칭 이동하면 역방향 z 버퍼가 생성됨.// #include "directxmath.h"XMMATRIX XM_CALLCONV XMMatrixOrthographicLH( [in] float ViewWidth, // 가까운 클리핑 평면의 절두체 너비 ..
[그래픽스] 깊이 버퍼 (Z-Test와 Z-Write) 목표깊이 버퍼 이해비선형 특성 이해깊이 버퍼링 작동 과정들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 무게 중심 좌표 인프런 강의 중 이득우의 게임 엔진을 지탱하는 게임 수학을 참고하여 작성되었습니다. 깊이 테스트 (Z-Test)깊이 테스트란?깊이 버퍼를 사용하여 픽셀의 가까운 쪽과 먼 쪽을 판정하는 것 GPU가 깊이 버퍼 내 Z 값을 비교하여 그릴지 말지 결정하는 방식이다. 물론, 깊이 테스트를 사용하지 않고 Z 정렬법(CPU 측에서 Z 정렬)만 하여 출력 순서를 결정할 수도 있다. 다만, Z 정렬법은 픽셀 단위가 아닌 정점 단위로 정렬하여 각 정점의 Z 값이 다르면 폴리곤의 출력 순서를 정하기 어렵다.깊이 테스트를 왜 하는가?물체와 카메라 간의 거리로 출력 순서를 지정..
[DirectX 이론] 동차 좌표계 목표동차 좌표계와 직교 좌표계의 대응 관계직교 좌표계의 아핀 변환과의 관계들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 아핀 변환 투영 변환 행렬동차 좌표계 (Homogeneous Coordinates)동차 좌표계란?투영 기하학에서 쓰이는 좌표계 아핀 변환을 행렬로 표현하기 위해서 한 차원 확장한다는 것을 알 것이다.벡터(정점)의 마지막 성분에 1을 추가하여 차원을 확장하는 수학적 규칙은 동차 좌표계를 바탕으로 한 개념이다.(벡터에 성분을 추가했던 이유: 아핀 변환을 위해 한 차원 추가한 행렬과 곱하기 위해서 행 - 열 수를 맞추어야 하기 때문)$$(x, y, w) / (x : y : w) / [x : y : w]$$직교 좌표계와 동차 좌표계직교 좌표계 - 유클리드 기하학..
[3차원 게임을 만드는 수학] 원근 투영 - 투영 변환 행렬(종횡비, 클립 공간, 깊이 값, 원근 나누기, NDC) 목표투영 변환 행렬 공식z 나누기와 w가 의미하는 것종횡비, 깊이 값, 동차 좌표계들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 행렬 (행렬 연산 방법)깊이 값 인프런 강의 중 이득우의 게임 엔진을 지탱하는 게임 수학을 참고하여 작성되었습니다.DirectX에 맞추어 행 기반 행렬 · 왼손 좌표계 기준으로 수정되었습니다. 원근 투영원근 투영이란?3D 공간 상의 물체를 원근감을 나타내어 2D 평면에 투영하는 기술 투영 윈도우(투영 평면)은 카메라의 조망 방향과 수직이며, NDC 좌표계 [-1, 1] 범위를 가진다. 거리는 카메라의 초점 길이라고 부르며, 수직 시야각에 의해 결정된다.원근 투영 함수1. NearZ와 FarZ는 0보다 커야 함.NearZ와 FarZ는 동일한 값일..
[게임 콘텐츠의 제작 원리] 아핀공간 목표아핀 공간아핀 변환의 변환 행렬 (이동, 크기, 회전)아핀 공간의 점과 이동 벡터들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 행렬 인프런 강의 중 이득우의 게임 엔진을 지탱하는 게임 수학을 참고하여 작성되었습니다. 아핀 공간(Affine Space)아핀 공간이란?이동이 가능한 부분 공간으로 마지막 차원이 1인 (초)평면 벡터는 원점에서부터 시작하기 때문에 기저벡터를 원점으로부터 분리해서 이동시킬 수 없다.대신 밀기 변환을 활용하면 선형 변환의 형태로 이동을 구현하는 것이 가능하다.아핀 공간은 왜 존재하는가? (의의)한 차원 높은 벡터 공간을 생성하여 이 안에서 아핀 공간을 활용해 이동을 구현할 수 있기 때문이다.아핀 공간 위에서 캐릭터가 움직이고 탐험 가능한 월드 공..
[DirectX] 광선, 교차판정 - 반직선(광선)과 평면 목표광선의 용도 및 광선의 방정식광선과 평면의 교차 판정들어가기 전 본 글에서 직접적으로 설명하지 않지만, 언급하고 있는 내용입니다. 평면의 방정식광선광선이란?특정 위치에서 어떤 방향으로 무한대로 뻗어나가는 반직선 광선의 방정식은 다음과 같다. $p_{0}$는 광선의 원점, $u$는 광선의 방향, $t$는 매개변수이다.매개 변수 t는 반드시 [0, ∞) 범위 내에 있어야 하며, 0보다 작은 값을 이용하면 광선 뒤쪽에 점이 만들어진다.언제 사용할까?대표적으로 FPS 게임에서 특정 위치에서 어떤 방향으로 발사된 총알이 타겟에게 맞았는지 확인할 때, 광선으로 총알을 모델링하고, 적을 경계 구체로 모델링하여 판정한다.만약, 총알과 타겟을  AABB 간의 충돌 검사로 진행할 경우,  총알의 속도에 따라 누락이 발..