🎨DirectX

[DX] Mesh 부모 클래스, SRT 순서, ID3DX11EffectMatrixVariable, D3DXMatrixRotationYawPitchRoll

공대 컴린이 2023. 2. 7. 11:10
728x90

Grid는 격자모양이고 Mesh는 그물망 모양이다.

SRT 순서가 중요한 이유

world = S * R * T;

R 회전 후T 이동을 먼저 수행하는 것과 T 이동 후 R 회전을 먼저 수행하는 것은 서로 다른 결과가 도출된다.

1. 45도 회전한 후 10만큼 이동 -> 회전한 방향으로 10만큼 이동

2. 10만큼 이동 후 45도 회전 -> 정면으로  10만큼 이동 후 회전

 

S 스케일 조정 후 T 이동을 먼저 수행하는 것과 T 이동 후 S 스케일 조정을 먼저 수행하는 것은 서로 다른 결과를 도출한다.

1. 2배만큼 커진 후 10만큼 이동 -> 총 20만큼 이동

2. 10만큼 이동 후 2배 커지기 -> 총 10만큼 이동

 

openGL이나 엔진들의 경우 TRS 순서를 사용하는 경우도 있다.

💡 ID3DX11EffectMatrixVariable 자료형 사용

shader->AsMatrix("World")->SetMatrix(world);

기존에 World, View, Projection을 초기화 할 때는 As 함수를 통해 쉐이더안에 있는 변수를 검색해서 가져오기 때문에 속도가 느린 프로그래밍 방식이었다.

 

ID3DX11EffectMatrixVariable* sWorld, *sView, *sProjection;
sWorld = shader->AsMatrix("World");
sView = shader->AsMatrix("View");
sProjection = shader->AsMatrix("Projection");

따라서 미리 World, View, Projection을 검색해서 저장해놓은 뒤 사용하면 속도가 훨씬 빠르다.

💡 D3DXMatrixRotationYawPitchRoll 함수

D3DXMatrixRotationYawPitchRoll 함수는 x,y,z축을 한번에 회전시키는 기능을 구현한다.
모든 축을 한번에 회전시키지 않으면 짐벌락 현상이 발생할 수 있다.

728x90