오늘이 DirectX 수업 마지막이었다.
제대로 이해한 내용들은 내가 이해할 수 있게 한번 더 정리했지만, 아직 자세하게 이해 못한 내용들이 있다.
나중에 정리할 것들인데, 어디서 막히는 지 알아야하니까 일단은 아는 데까지 적어보겠다.
View Matrix (뷰 행렬) 구하는 법.
카메라가 존재하는 게 아니라, 카메라가 있다고 생각하고 오브젝트의 위치를 옮기는 것이다!!!
모두 눈속임이다.
1. 카메라를 왼쪽으로 5 움직인다면, 실제로는 오브젝트들이 오른쪽으로 5만큼 움직이는 것이다.
2. 카메라를 왼쪽으로 5 움직였을 때, 오브젝트의 옆면이 보이는 이유는 오브젝트가 조금 회전했기 때문이다.
이렇게 카메라를 기준으로 오브젝트의 위치, 회전 값을 바꿀 때 필요한 행렬이 View 행렬이다.
1. (바라 볼 위치 - 카메라의 위치) -> 카메라의 앞 방향을 구한다.
2. 외적(카메라의 앞 방향, 월드 공간에서의 윗 방향) -> 카메라의 오른쪽 방향을 구한다.
3. 외적(카메라의 앞 방향, 카메라의 오른쪽 방향) -> 카메라의 윗 방향을 구한다.
카메라를 기준으로 벡터를 구했으니, View 행렬을 만들어보자.
Vector3f forward = (target - position).Normalized();
Vector3f right = up.Cross(forward).Normalized();
Vector3f upDir = forward.Cross(right).Normalized();
float x = right.Dot(position);
float y = upDir.Dot(position);
float z = forward.Dot(position);
Matrix4f result;
result.Get(0, 0) = right.x; result.Get(0, 1) = upDir.x; result.Get(0, 2) = forward.x; result.Get(0, 3) = 0.0f;
result.Get(1, 0) = right.y; result.Get(1, 1) = upDir.y; result.Get(1, 2) = forward.y; result.Get(1, 3) = 0.0f;
result.Get(2, 0) = right.z; result.Get(2, 1) = upDir.z; result.Get(2, 2) = forward.z; result.Get(2, 3) = 0.0f;
result.Get(3, 0) = -x; result.Get(3, 1) = -y; result.Get(3, 2) = -z; result.Get(3, 3) = 1.0f;
회전을 담당하는 행렬요소?에 값을 대입한다. -> 왜 저 위치에 저 값을 넣어야 하는 지 모름.
위치를 담당하는 행렬요소?에 값을 대입한다. -> 왜 내적을 하고, 왜 -를 붙어야 하는 지 모름.
Rrojection Matrix (투영 행렬) 구하는 법.
원근감을 표현한다고만 알고 있고 자세히 모르겠음.
오늘 작성한 다이렉트X 코드
- fbx 파일, diffuse 텍스쳐 파일을 Mixamo.com 사이트에서 구해옴.
- 쉐이더에 버퍼로 Time값 넘겨서, 풀이 흔들리는 듯하게 간단한 버텍스 애니메이션 만들어봤음.
좀 그럴듯하게 만든 뒤, 마지막 캡쳐샷을 찍었다.
DirectX를 배우고 나니까, Unreal과 Unity 같은 엔진들이 얼마나 괴물인지 알겠다.
옛날에는 게임 자체 엔진을 만드는 데에만 거의 2년을 잡았었다고 하니까 워후... 감도 안온다.
Unreal과 Unity 엔진이 뜬 이유가 확실히 느껴진다.
'기타 > DirectX' 카테고리의 다른 글
[DirectX11] 14일차 (타이머 만들기 / 노멀맵 적용하기) (0) | 2021.03.05 |
---|---|
[DirectX11] 13일차 (스페큘러 구하기 / 림 라이트 구현하기) (0) | 2021.03.04 |
[DirectX11] 12일차 (Depth 버퍼 만들기 / 디퓨즈 만들기) (0) | 2021.03.03 |
[DirectX11] 11일차 (View, Projection 행렬 / 키 입력받아 카메라 이동, 회전) (0) | 2021.03.02 |
[DirectX11] 10일차 (인덱스 버퍼 만들기 / 클래스 정리하기) (0) | 2021.02.26 |