일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 게임수학
- 다이렉트X 튜토리얼
- engine
- CommandList
- CPU
- Direct Init
- Direct3D
- UE4
- DirectXTK
- C++
- 다이렉트 초기화
- DirectX12
- 코딩
- 세팅
- vertex
- swapchain
- GPU
- 전처리문
- DESC
- RenderTargetView
- 프로그래밍
- 다이렉트X
- 다중표본화
- c
- 동기화
- C언어
- Direct3D Init
- View
- DirectX
- Input Assembler
- Today
- Total
목록DirectX12/게임 수학 (6)
비타Cpp
카메라의 이동 회전 방식 중에 중심점으로부터 일정 거리를 반지름으로 하여 구를 그리며 이동하는 방식이 있다. 여기서 카메라가 바라보는 방향은 쉽게 중심점 - 카메라 위치의 단위 벡터를 이용하면 된다. 하지만 카메라의 위치는 조금 생각을 해봐야 한다. 여기서 필요한것은 y축에서의 회전량 phi, x축의 회전량 theta, 마지막으로 반지름(중심점과 카메라의 거리) radius(r)이다. 이 세가지 요소를 이용하여 구하는 카메라의 좌표는 다음과 같다. $$x' = r\times\sin(phi)\times\cos(theta)\\ y' = r\times\cos(phi)\\ z' = r\times\sin(phi)\times\sin(theta)$$ 이러한 공식이 나오는 풀이과정은 아래 그림을 보면 알 수 있다.
행렬식은 정방 행렬을 입력받아서 실숫값을 출력하는 특별한 함수다. 정방 행렬 A의 행렬식을 det A로 표기한다. 기하학적으로 행렬식이 3차원 입체의 부피와 관련이 있다는 점과 행렬식이 선형 변환 하에서 그 부피가 변하는 방식에 대한 정보를 제공한다는 점을 증명하는 것이 가능하다. 또한 행렬식은 크라메르의 법칙(Cramer's rule)을 이용해서 1차 연립방정식을 푸는 데에도 쓰인다. 또한 행렬식은 역행렬의 가능 여부를 손쉽게 판단할 수 있다는 것도 중요하다. 일단. 행렬식을 알아보기전에 소행렬 개념을 알아야한다. n x n 행렬 A가 주어졌을 때, 그 소행렬(Minor Matrix) Aij는 i번째 행과 j번째 열을 삭제해서 나온 (n-1) x (n-1) 행렬이다. 예: 다음 행렬의 소행렬 A11, ..
비례(Scaling) 변환은 물체의 크기를 바꾸는 효과를 낸다. 다음은 비례 변환의 정의다. S(x, y, z) = (sxx, syy, szz) 이 변환은 좌표계를 기준으로 하여 벡터를 x축으로 sx 단위, y축으로 sy 단위, 그리고 z 축으로 sz단위만큼 비례한다. 그럼 이 S가 실제로 하나의 선형 변환임을 증명해보자. $$S(u+v) = (s_x(u_x + v_x),\ s_y(u_y + v_y),\ s_z(u_z + v_z))\\ =(s_xu_x + s_xv_x,\ s_yu_y + s_yv_y,\ s_zu_z + s_zv_z)\\ = (s_xu_x,\ s_yu_y,\ s_zu_z) + (s_xv_x,\ s_yv_y,\ s_zv_z) \\ =S(u) + S(v)$$ $$S(ku) = (s_xku_x,..
외적은 내적과 달리 벡터를 결괏값으로 가지는 연산이며, 외적은 오직 3차원 벡터에 대해서만 정의된다. 두 3차원 벡터 u와 v의 외적을 취하면 u와 v에 모두 직교인 벡터 w가 나온다. u = (ux, uy, uz), v=(vx, vy, vz)라고 할 때, 둘의 외적은 다음과 같이 정의된다. w = u × v = (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx) 잠시 예를 들어보자. u = (2, 1, 3) , v = (2, 0, 0) 일 때, w = u × v와 z = v × u를 계산해보자. w = u × v = (2, 1, 3) × (2, 0, 0) = (1*0 - 3*0 , 3*2 - 2*0 , 2*0 - 1*2) = (0, 6, -2) z = v × u = (2, 0, 0)..
벡터 집합 {v0,v1, ... vn-1}의 n개의 모든 벡터가 단위 길이이고 서로 직교일때 그러한 벡터 집합을 정규직교(Orthonormal) 집합이라고 한다. 주어진 벡터 집합을 정규직교 벡터 집합으로 만드는 것을 직교화(Orthogonalization)라고 한다. 간단한 이해를 위해 2차원의 경우 부터 살펴보자. 위의 왼쪽 그림은 벡터 집합 {v0, v1}을 직교화 해서 정규 직교 집합 {w0, w1}을 얻는 과정이다. w0 = v0으로 시작해서, 벡터 v1이 w0과 직교가 되도록 w0의 방향으로 작용하는 부분을 v1에서 뺀다. w1 = v1 - projw0(v1) 이제 서로 직교인 벡터들의 집합 {w0, w1}이 만들어졌다. 마지막으로 w0과 w1을 정규화해서 단위 벡터로 만들면 정규직교 집합이 ..
점곱(dot product)이라고도 부르는 내적(inner product)은 스칼라값을 내는 벡터 곱셈의 일종이다. u = (ux, uy, uz)이고, v = (vx, vy, vz)라고 했을때, 내적은 다음과 같이 정의된다. u · v = uxvx + uyvy + uzvz 다른 말로하면 "내적은 대응되는 성분들의 곱들의 합" 이다. 내적의 기하학적 의미는 코사인 법칙을 적용해보면 알수 있다. u · v = ||u|| ||v|| cosθ θ는 두 벡터 u, v 사이의 0≤θ≤π를 만족하는 각도이다. 따라서 위 식은 두 벡터의 내적이 두 벡터 사이의 각도의 코사인을 벡터 크기로 비례한 것임을 뜻한다. 특히 u,v 둘다 단위 벡터일 때 경우 u · v는 두벡터 사이의 각도의 코사인이다. 이를 통해 내적의 유용..