-
25. D3D 프레임워크 만들기Software/DirectX 2024. 5. 24. 10:58728x90
Table of Contents
1. Effect를 통해 shader로 변수넘겨주기
2. 미리 컴파일된 쉐이더(.cso , .fxo) 컴파일하기1.Effect를 통해 shader로 변수넘겨주기
- BoneTransform = ID3DX11Effect->GetVariableByName("쉐이더에서 사용할 변수명")->AsMatrix(); => 쉐이더 리소스 뷰로 넘겨줄 변수설정 함수
- 쉐이더에서 설정한 변수명으로 해당 변수를 사용할 수 있게 된다.
- BoneTransform, 오브젝트의 월드좌표, view와 projection 행렬 등을 넘겨주어 버텍스쉐이더에서 연산하여 CPU부하를 줄인다.
2. 미리 컴파일된 쉐이더(.cso , .fxo) 컴파일하기
- fx파일이나 hlsl 파일을 사용하여 프로그램을 구성하려면 항상 해당 파일이 로딩될때마다 컴파일되어야하는 불편함이있다.
- 위의 방식으로는 항상 fx파일이나 hlsl파일이 프로그램에 붙어야하므로 배포받은 사용자가 손쉽게 수정가능하다는 단점 또한 있다
- 미리 컴파일된 쉐이더를 사용함으로써 위의 문제들을 해결할 수 있다.
1. fx 명령어를 명령프롬프트(cmd)에서 사용할 수 있도록 directX폴더 내부 Utilites/bin/64/fxc.exe파일을 C\windows\System32 내부에 복사한다. 2. 명령 프롬프트를 켜서 fx 파일이 있는 곳으로 이동한 뒤 fxc 매서드를 실행 3. fxc /T fx_5_0 /Fo VertexShader.fxo VertexShder.fx (사용 예시) 4. /T 옵션은 컴파일할 쉐이더 버전, /Fo 옵션은 생성할 파일 이름, 컴파일할 쉐이더 이름 이다
- 컴파일 옵션 Syntax 종류
- Compute shader : cs_5_0 등 (버전 별로 해당 기능 참조)
- Vertext shader : vs_5_0 등
- Pixel shader : ps_5_0
- Geometry Shader : gs_4_0
- Domain Shader : ds_5_0
- Hull Shader : hs_5_0
- Root Signature : rootsig_1_0
3. Column major와 Row major
- DirectX는 row major로 행렬을 계산한다.(행 순)
- OpenGl은 column major로 행렬을 계산한다.(열 순)
- DirectX에서 전치(transpose : shader로 보낼때 사용되는 순서)가 opengl의 행렬이 된다.
- directx의 world matrix를 scale rotation translation 순으로 곱한다면 (SRT)
- opengl은 world matrix를 traslation rotation scale 순으로 곱한다 (TRS)
- 뷰 투영행렬도 반대 오더를 따른다
- directx가 Object world view projection 의 순서라면
- opengl은 projection view world Object 순이다.
728x90'Software > DirectX' 카테고리의 다른 글
24. 애니메이션 ( Animation ) (0) 2024.05.24 23. 법선 매핑 (Normal Mapping)과 그림자 매핑 (Shadow Mapping) (0) 2024.05.24 22. 입방체 매핑 ( Cube Mapping ) (0) 2024.05.24 21. 인스턴싱 (Instancing)과 절두체 선별 (Frustum Culling) (0) 2024.05.24 20. 1인칭 카메라 (0) 2024.05.24