DirectX11 모델 뷰어
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 매칭되어 나오지만, 릴리즈 모드에서는 키 값이 없는 경우는 추가하지 않아 각각 다르게 나올수있다.