본문 바로가기

DirectX( 다이렉트 X)/D3D11 제작일지

텍스쳐, 범프맵, 스페큘러 매핑적용 (2020 01 31)

Main 파일
APP  :: 매프레임 루프해 명령큐에 있는 메세지를 확인하고 처리 , +오브젝트 생성 (PeekMessage)
Camera :: 카메라 행렬과 프로젝션을 이용해 카메라 위치를 조절하는 클래스
+Codex :: mtl 파일 읽어와 범프맵 스페큘러맵등 매핑을 지원하는 클래스
+TexturePreprocess :: codex에서 가져온 이미지와 mtl의 텍스쳐 좌표 적용, 범프맵 적용하는 클래스
Texture :: 텍스쳐 리소스와 리소스 뷰를 생성해서 바인딩하는 클래스
GDIManager :: 윈도우즈의 핵심 모듈 중의 하나로 출력과 관련된 기능을 담당하는 클래스
Keyboard :: 어떤 키보드의 키를 입력 받았는지 확인
Mouse :: 마우스 키 입력을 받았는지 확인
Timer :: 프레임 반복을 위한 타이머 메소드 (C++11에서 지원하는 시간라이브러리 chorno 사용)
Window :: 윈도우 객체 생성하고 키보드 마우스 객체도 생성, 메세지 프로시저
WinMain :: 메인 함수 
InfoManager :: 예외처리시 오류정보들 저장한뒤 띄우기,
GrahpicsClass :: 디바이스 초기화, 다비이스 가져오기
PointLight :: 포인트 라이트 생성하고 바인딩하는 클래스
Surface :: 텍스쳐를 입히는 클래스
MeshObject :: 모델링 로드용 및 초기 설정 클래스 + 모델 루트출력
Vertex :: 버텍스 정보 설정, 템플릿 클래스

 

 

매크로
CustomException :: 예외처리용, 예외발생시 메세지박스 띄움
CustomDefine :: 매크로 정의 및 상수
WindowErrorMacro :: 런타임용 예외처리 검사
NoExcept :: 예외발생 무시용 매크로

 

 

HLSL 쉐이더 코드
PhongPS,VS.hlsl:: 색에 따라 라이트를 받는 쉐이더 (픽셀, 버텍스)
SolidPS,VS.hlsl:: 지정한 단일색으로 칠하는 쉐이더 (픽셀, 버텍스)

 

 

파이프라인
PipeLineHeaders :: 파이프라인 폴더 헤더파일 모음
PipeLine ::바인딩 함수가 필요한 클래스의 부모클래스 (콘텍스트 바인딩 함수 정의)
VertexBuffer :: 정점 버퍼 생성 및 바인딩
InputAssembler :: InputLayout 생성한 후  콘텍스트에 바인딩
(정점 버퍼로 부터 가져온 데이터로 프리미티브 제작, 시스템 생성값을 버텍스 쉐이더에 보내 출력)
VertexShader :: 버텍스 쉐이더 생성 및 바인딩 
PixelShader ::픽셀 쉐이더 생성 및 바인딩 (색담당)
IndexBuffer :: 인덱스 버퍼 생성 및 바인딩
Topology :: 프리미티브 설정 타입을 매개변수로 받아 생성 바인딩
ConstantBuffers :: 상수버퍼 생성 (자식클래스 VertexConstantBuffer,PixelConstantBuffer)
TransformConstantBuffer :: 크기(S),회전(R),위치(T)를 위한 상수 버퍼
Sampler :: 샘플러 선언 (필터) 및 바인딩하는 클래스

 

 

그리기
Drawing :: 오브젝트들을 벡터 스마트포인터에 저장하고 APP에서 출력
DrawBase :: 모든 도형의 부모클래스 템플릿을 사용해 다형성 지향
Cone :: 원뿔을 만드는 클래스
Cube :: TriangleList를 사용해 큐브 오브젝트를 만드는 클래스
Plane :: 2D 평면용 사각형을 만드는 클래스
Prism :: 삼각뿔을 만드는 클래스
Sphere :: 구를 만드는 클래스
Modle :: 가져온 모델링 그리는 클래스

 

 

다음할일:: 씬모델 가져오기, fbx로 모델 불러오기, 모델링 런타임 도중 불러오는 기능

 

후기:: mtl로 이용해 가져오는 방식을 사용했는데 버텍스가 많으면 불러오는데 너무 오래걸리고 이미지 파일등 몇개가 바뀌면 mtl을 직접 수정해야 되서 많이 불편하다. assimp에 fbx를 사용하는 법이 있는데 참고해야겠다.

프레임워크 정리한다는게 기능을 넣으면 넣을수록 더 지저분해지는데 다시 정리가 필요할지도...

 

assmip(모델링 로드 라이브러리) https://github.com/assimp/assimp

ImGui(UI 라이브러리) https://github.com/ocornut/imgui