DirectX11 모델 뷰어

2018. 6. 29. 16:10프로그래밍/DirectX

DirectX11 Model Viewer


 - 개발기간 : 2018.3 ~ 2018.3(5일)

 - 개발환경 : MFC, DirectX11


 - DirectX11을 사용하여 만든 모델뷰어입니다.

 - Dx11의 이해와 HLSL 셰이더 이용과 설계,  이전에 하지 못했던 하드웨어 스키닝을 

   목표로하였습니다.

 - 모델링 파일 로드에는 Open Asset Importer Lib를 사용하였습니다.

 - 이미지 파일 로드에는 FreeImage Lib를 사용하였습니다.

 - 모델링 파일은 deviant art, 애니메이션은 mixamo에서 가져왔습니다.


 - 프로젝트 다운로드 : https://github.com/hns17/DirectX11


[영상]



Assimp Lib 사용시 알아두면 좋은 것들

1. Flag

  (1) Dx를 위한 Flag

aiProcess_MakeLeftHanded : 왼손 좌표계로 로드, 디폴트는 오른손 좌표계이다.

- aiProcess_FlipWindingOrder : cw로 로드, 디폴트는 ccw로 로드된다.

- aiProcess_FlipUVs : 텍스쳐의 y를 Inverse한다. dx의 uv 시작점은 좌측 상단이지만, 디폴트는 좌측하단이다.

- aiProcess_ConvertToLeftHanded : dx사용자를 위해 위 3가지를 통합한 플래그.

- 일반적인 경우 aiProcess_ConvertToLeftHanded를 사용하면 된다.


2015/09/27 - [프로그래밍/3D Graphics] - [Common]3DS MAX, D3D, OpenGL의 좌표계에 대하여...

2015/11/14 - [프로그래밍/3D Graphics] - [Common]와인딩 모드, 오른나사(CW)와 왼나사(CCW)



  (2) 그 외 Flag

- aiProcess_Triangulate : 삼각 메쉬 형태로 구성합니다.

- aiProcess_OptimizeMeshes : 메쉬를 최적화 하여 메쉬 수를 줄입니다.


[노말 정보 생성이 필요한 경우]

 - aiProcess_GenNormals : Normal 정보를 생성합니다.

       - aiProcess_CalcTangentSpace : tangent와 bi-tangent 정보를 생성합니다.


[계층구조와 애니메이션 정보가 필요없는 경우]

 - aiProcess_PreTransformVertices : 계층구조와 애니메이션 정보가 제거하고 정점정보를 구성합니다.


  - 기타 다른 Flag에 대한 더 자세한 내용은 LINK:여기 를 참조하시면 됩니다.


2. 행렬

- assimp의 디폴트는 칼럼 메이저이며, DX는 로우 메이저 방식이므로 전치해줘야 한다.

- Offset Mat 정보를 제공하기 때문에 만들 필요 없다.


2015/09/28 - [프로그래밍/3D Graphics] - [COMMON] 행렬에 대하여...


3. 애니메이션

- Rotation의 쿼터니온 값은 이전 프레임의 누적된 값을 제공하므로 그대로 사용하면 된다.

- 쿼터니온 값의 순서는 그래픽스 개념에 맞춰 wxyz순이므로, Dx를 사용할 시 유의하자.

- 애니메이션 값은 로컬 행렬이 연산된 값이므로 최종 행렬을 만들때 로컬행렬을 고려할 필요없다.

- 디버그 모드에서는 키값이 없어도 정보를 채워 pos, scale, rot 모든 키 값이 프레임에 맞춰 1:1 매칭되어 나오지만, 릴리즈    모드에서는 키 값이 없는 경우는 추가하지 않아 각각 다르게 나올수있다.