ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 25. D3D 프레임워크 만들기
    Software/DirectX 2024. 5. 24. 10:58
    728x90

    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