17 SimpleMath 예제

한경식·2024년 12월 17일
  • 2주차에 배웠던 행렬 등등을 직접 만들어도 되지만 SimpleMath 파일에 Microsoft에서 만들어 배포하기 때문에 파일을 다운받아 사용해도 된다

  • 한번 살펴보면서 무슨 함수, 어떻게 구현됐는지 확인해보아야 한다

  • Types.h

    • Types.h에 기존에 만들어 논 Vec2,3,4를 SimpleMath를 통해 바꿔준다
    • 마찬가지로 4x4행렬을 SimpleMath로 만들 수 있게 해논다
  • Struct.h

    • TransformData에 float4로 행렬처럼 만들어 놓은 offset을 지우고 World, Voew,Projection을 좀전에 Types.h에서 만든 Matrix를 사용하여 행렬을 만들어 놓는다
    • 이 행렬들을 가져와 Shader에서 처리할 것이다
  • Game.h Update 함수

    • Vector3로 local Position, Rotation, Scale을 맴버변수로 만든다
    • 이를 사용해 Matrix로 만든 scale, rotation, translation에 설정하여 4x4행렬로 변경해준 뒤 Matrix로 만든 4x4행렬 world에 SRT 행렬을 만들어 준다
    • transformData.World에 4x4로 만든 world를 저장해주어 Shader로 보낼 World 값을 설정해 준다
  • cbuffer TransformData

    • Shader에 TransformData를 가져온 함수에서 4x4행렬로 world, view, projection을 받아오게 바꿔준다
    • 이때 row_major는 행을 우선으로 데이터를 저장하는 키워드이다
    • 배열이 메모리에 저장될때 행의 원소들이 연속적으로 배치되고, 행의 원소가 다 저장되면 다음 열로 넘어가 저장된다
    • input된 값에 TransformData에 가져온 World, view, Projection을 곱해 float4 형태에 position에 저장하여 WVP순서로한 4x4행렬을 만들어 내보낼 변수인 output.position에 저장해준다
  • SRV/WVP

    • SRV
      • Scale->Rotation->View 순으로 계산하는 이유는 변환행렬을 계산할 때 이 순서대로 계산이 들어가야 원하는 값으로 액터가 변환이 되기 때문에 이 순서를 기억해 계산해야한다
      • WVP
        • World->View->Projection은 로컬 좌표를 World로 변환한 뒤, World를 View(카메라)로 바꾸고, View를 Projection으로 3D에서 2D로 변환하는 과정을 순서대로 계산하기 위해서이다
profile
게임 개발 지망생

0개의 댓글