[DirectX11] 17. Depth-Stencil Buffer 사용하기.

[DirectX11] 16. FBX File로부터 모델 데이터 Import하기.에서 아래와 같이 렌더링 결과물을 얻을 수 있었다. 이는 앞면에 가려져 보이지 않아야할 그러니까, 렌더링되지 않아야할 부분들까지 모두 렌더링되어서 그런것이다. Depth Buffer를 이용한 Depth Test를 하면 이 이슈를 해소할 수 있다. Depth Buffer는 렌더링되는 픽셀의 깊이값을 저장한다. 그리고 같은 위치에 새로운 픽셀이 그려져야 할 때 저장된 깊이값과 새로운 픽셀의 … Read more

[DirectX11] 16. FBX File로부터 모델 데이터 Import하기.

fbx파일을 로드해서 모델을 렌더링하려고 한다. fbx파일을 로드하려면 FBX SDK관련 셋팅이 필요하다. 관련 내용들은 FBX SDK Help | Getting Started | Autodesk 에서 참고하였다. FBX SDK 다운로드 및 설치 FBX | Adaptable File Formats for 3D Animation Software | Autodesk 우선 이곳에서 SDK 다운로드를 한다. 다운로드 이후 설치까지 한다. 설치된 내용이다. 필요한 파일들을 복사해서 사용하기 때문에 … Read more

[DirectX11] 15. 카메라( View & Projection ) – Constant Buffer 활용하기 2편.

카메라변환, 즉 View와 Projection변환에 대해 알아보자. 이 두개의 요소 역시 Constant Buffer를 활용해서 구현할 것이다. 이전까지의 Transform변환은 로컬 공간에서의 모양을 결정하는 정점들이 월드 공간으로의 변환을 해주는 것이였다. 여기에 추가로 해주는 View변환은 카메라 공간으로의 변환을 해주는 것이고, Projection변환은 투영 공간으로의 변환을 해주는 것이다. 각각 어떤것인지 한 번 알아보자. View 변환 View변환은 카메라 공간으로의 변환을 해주는 것이라고 … Read more

[DirectX11] 14. ImGUI 설치하기

Reference ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies 에서 설치 및 시작 가이드를 볼 수 있다. 설치하기 Zip파일로 프로젝트 다운로드 받기 프로젝트에 직접 필요한 파일 복사하기 압축을 푼 후 루트 경로에 있는 필수 파일들을 내 프로젝트에 복사하여 포함한다. 내가 사용할 그래픽스 API에 맞는 Implement 파일들을 추가로 복사하여 포함한다. 멀티플랫폼 환경으로 … Read more

[DirectX11] 13. 라이트( Directional Light ) – Constant Buffer 활용하기.

라이트( Directional Lighting )에 대해 구현을 해보고자 한다. 그리고 이 라이트을 구현할때 Constant Buffer를 활용하려 한다. 구현하려는 라이트는 난반사( Diffused Reflection )에 기초한다. Diffused Reflection 렌더링되는 물체에 빛이 일정한 방향으로 비추고 있을때, 표면이 일정하지 않은 물체는 반사되는 빛의 양이 각 표면마다 다르다. 이 일정하지 않은 표면을 법선( Normal )벡터로 표현한다. 법선 벡터와 빛의 방향을 가지고 … Read more

[DirectX11] 12. 변환 – Constant Buffer에 대해 알아보자.

지금까지 렌더링한 사각형을 크기 및 위치를 변화시켜보자. 정점 버퍼의 내용을 수정해도 할 수 있지만, 매번 정점 버퍼의 내용을 수정하면서 렌더링하기엔 꽤나 비효율적이다. 무엇보다 강력한 GPU의 힘을 이용하지 못한다. 정점 버퍼의 내용은 모양을 정의하는 것이다. 이 모양을 Matrix를 통해 변환을 해야한다. 그리고 GPU를 이용하기 위해 해당 변환은 Vertex Shader에서 할 것이다. 이를 위해 필요한 것이 바로 … Read more

[DirectX11] 11. 이미지 – Texture2D에 대해 알아보자.

사각형까지 렌더링이 되었다. 이제 이 사각형에 이미지를 출력해보려고 한다. 이미지를 출력하기 위해서는 Texture2D라는 리소스가 필요하다. Texture2D는 GPU 메모리에 적재되어 Pixel Shader에서 샘플링될 수 있다. 샘플링된다는 것은 특정 픽셀에서 표현해야할 색상값을 표본으로 가져올 수 있다는 뜻이다. 이미지를 렌더링할 수 있는 Texutre2D에 대해 알아보자. 정점에서 가지는 텍스처 좌표 또한 보간되어 각 픽셀도 텍스처 좌표를 가지게 된다. 이 … Read more

[DirectX11] 10. 사각형 – Index Buffer에 대해 알아보자.

Index Buff에 대해 알아보자. 인덱스 버퍼를 사용하는 이유는 정점 버퍼에서 사용하는 GPU 메모리 사용량을 줄이기 위해서이다. 간단하게 색상을 포함하는 사각형을 보자. 정점 버퍼로만 이 사각형을 렌더링하기 위해서는 총 6개의 정점 데이터가 필요하다. 각 정점이 위치( float[3] )와 색( float[4] )을 포함한다면 정점 버퍼의 메모리 사용량은 28 x 6 = 168 bytes가 된다. 하지만 인덱스 버퍼를 … Read more

[DirectX11] 9. 여러개의 슬롯에 연결된 버텍스 버퍼를 렌더링 해보자.

여러개의 슬롯에 연결된 버텍스 버퍼를 렌더링 해보자. Vertex Buffer를 생성하는 문서에서 렌더링 파이프라인에 연결할 때 여러개의 정점 버퍼를 슬롯을 이용하여 동시에 연결할 수 있음을 잠깐 언급을 했었다. 여러개의 Vertex Buffer를 연결하기 여러개의 정점 버퍼를 렌더링 파이프라인에 연결하는 부분을 다시 한번 살펴보자. 정점 버퍼를 렌더링 파이프라인에 연결하는 이 함수의 자세한 명세는 다음과 같다. 함수 명세를 보면 … Read more

[DirectX11] 8. 삼각형 – Pixel Shader에 대해 알아보자.

Pixel Shader에 대해 알아보자. 픽셀 쉐이더는 정점 쉐이더와 모든 과정이 흡사하다. Input Layout설정만 빠지면 사실상 이름만 바뀌는 수준이다. Shader Code 작성 쉐이더 코드는 정말 간단하다. 그냥 입력된 컬러를 그대로 반환한다. 입력된 데이터값이 이미 해당 픽셀 위치에 대해 정점간 데이터의 보간된 데이터이다. 따라서 추가 가공을 할 필요 없이 받은 파라메터의 값을 그대로 리턴하면 된다. 픽셀 쉐이더에서 … Read more