기타/DirectX

[DirectX11] 7일차 (Transform 클래스 구현하기 / Quad Triangle 그리기)

푸쿠이 2021. 2. 23. 17:57
참고 자료

데이터 모델링

 

pdfslide.net/engineering/kgc2014--559c0e872ee3a.html

 

행렬

Vector에 Matrix(행렬)를 곱해주면, Transform(위치, 회전, 크기)를 구현할 수 있다.

이런 행렬을 변환행렬이라고 하는 것 같다.

 

행렬은 행 기준 행렬(Row-major Matrix), 열 기준 행렬(Column-major Matrix)이 있다.

 

보면 훨씬 이해가 잘 되는 거 같아서 이미지를 퍼왔다.

이미지 출처 : en.wikipedia.org/wiki/Row-_and_column-major_order

 

msdn mul 이라고 구글링하면, 요렇게 나온다.

docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-mul

mul(벡터, 행렬)이라면, 벡터를 행(Row) 기준 벡터로 읽을게.

(벡터를 1x4로 본다는 뜻이므로, 행렬을 열(Column) 기준 행렬로 계산한다는 말.)

 

mul(행렬, 벡터)라면, 벡터를 열(Column) 기준 벡터로 읽을게.

(벡터를 4x1로 본다는 뜻이므로, 행렬을 행(Row) 기준 행렬로 계산한다는 말.)

 

행렬 곱셈은 AxB CxD 일때, B와 C가 같아야 곱셈이 되니까.

(1x4 4x4는 됨. 4x1 4x4는 안되므로, 위치를 바꾸어서 4x4 4x1로 한 것이다.)

 

 

행렬 이미지는 여기서 제작했다.

www.symbolab.com/solver/matrix-calculator

 

위치 변환 행렬

이해 못함. ㅠ;;

 

회전 변환 행렬

Matrix4x4를 쓰지만, 회전 변환을 할 때는 3x3만 필요하다. 가로, 세로로 한 줄씩은 없다고 봐도 된다.

 

나중에. 일단 집가야지. ㅎㅎ

 

크기 변환 행렬

크기는 가장 쉽다.

오브젝트의 크기가 원래 (3, 5, 4)였다고 가정하자.

단위 행렬을 곱하면, 당연하게도 원래의 데이터를 유지한다.

1 대신 곱하고 싶은 값을 넣어서 크기를 변환시키면 된다.

 

중요!! 오브젝트에 적용할 때는 (크기, 회전, 위치) 순으로 행렬을 곱해야 정상적으로 변환된다.

 

쉐이더 언어 자동 완성 확장 프로그램

완벽하지는 않지만, 사용 안하니까 너무 불편하다.

Visual Studio 툴에서 확장 프로그램을 설치했다.

 

쉐이더 파일은 Visual Studio Code 툴에서 작성하면 더 편하다고 한다.

 

작성한 DirectX 코드

- Vector, Matrix 클래스 일부분 구현함.

- Quad, Triangle 클래스 제작해서 화면에 두 개 띄움.

- Transform 클래스 분리해서 이동 회전 크기 변환 구현함.

 

github.com/mingyu243/STL_GraphicsEngine2/tree/57fe790091dfcf04571041d5e72f80dd166f9f4c

 

mingyu243/STL_GraphicsEngine2

Contribute to mingyu243/STL_GraphicsEngine2 development by creating an account on GitHub.

github.com

구현 캡처.