CPU에서 GPU로 데이터를 전송할 때는 비교적 속도가 느리니,
최대한 단순하게 계산해서 접근할 수 있도록 하는 것이 좋다.
이러한 이론을 실제 코드로 구현하는 방법은
여러 개의 변환을 순서만 잘 정리하면 하나의 변환 행렬로 만들 수 있다.
따라서 결과적으로 GPU에게 회전과 이동을 한 하나의 변환 행렬만 보내면 된다.
이러한 변환에는
Model Matrix, View Matrix, Projection Matrix가 같이 사용된다.
위 3 가지는 나중에 추후 따로 더 자세하게 정리해보겠다.
이번 포스팅에서는 Model Matrix와 Invertranspose 두 가지를 사용해서
쉐이더의 코드를 작성해볼 것이다.
노멀 벡터
노멀 벡터를 회전을 시킬 때는
다른 방식을 사용해야 한다.
물체를 회전을 시킨다면, 물체의 표면을 향하고 있는
노멀 벡터도 같이 회전을 시켜야한다.
따라서 non uniform scale을 해줘야 한다.
노멀 변환 행렬이 M일 때,
노멀에다가 Invertranspose를 변환시켜주면 된다
라는 의미가 결론이다.
GLM에서는 열기준 행렬을 사용하기 때문에
곱하는 순서를 잘 맞춰줘야 한다.
순서를 외우려고 한다기 보단,
그냥 이런 게 있구나 하고 검색해서 사용하는 편이 더 편할 거 같다.
Model Matrix 를 구현하기 위해서는
가장 오른쪽에 scale, Y축 회전, X축 회전, Translate가 있다.
'그래픽스 > DX11' 카테고리의 다른 글
D3D11 애파인 변환(=아핀 변환) (1) | 2024.12.16 |
---|---|
D3D11 회전축에 대한 벡터의 회전 (1) | 2024.12.13 |
D3D11 선형 변환(Linear Transformation) - 동차성과 가법성 (0) | 2024.12.12 |
D3D11 그래픽스 - 변환 (1) | 2024.12.11 |
D3D11 Rasterization - Light (0) | 2024.10.30 |