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

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

[DirectX11] 7. 삼각형 – Input Layout에 대해 알아보자.

Input Layout에 대해 알아보자. Vertex Buffer와 Vertex Shader를 사용하기 위해 설정을 해주어야 하는게 하나 더 있다. 바로 Input Layout의 설정이다. Input Layout은 정점 쉐이더에서 사용할 정점에 대해 특성을 부여해준다. 정점 구조체로 정점 버퍼를 만들었던 것을 보자. 정점은 다양한 형태로 구성될 수 있고 정점 버퍼 역시 다양한 형태를 따를 수 있다. 쉐이더에서는 이 정점의 구조에 대해 … Read more

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

Vertex Shader에 대해서 알아보자. 이전글에서 정점 버퍼를 만들었다. 이 정점 버퍼의 내용으로 렌더링을 걸었을 때 가장 처음 가공을 시작하는 렌더링 파이프라인의 스테이지가 바로 이 Vertex Shader Stage이다. 이번글에는 HLSL로 작성된 1.쉐이더 파일을 컴파일한 후, 2. 컴파일된 내용을 쉐이더 객체로 생성하여 3. 렌더링 파이프라인에 연결하는 과정에 대해 알아볼 것이다. Shader Code 작성 우선 아주 간단한 형태의 … Read more

[DirectX11] 5. 삼각형 – Vertex Buffer에 대해 알아보자.

Vertex Buffer에 대해 알아보자. 마이크로 소프트 홈페이지에서 공식적으로 정점 버퍼를 만드는 방법에 대해 설명하고 있다. 우선 가장 먼저 정점 버퍼를 만드는 예제 코드를 보자. Vertex Structure 정의하기 정점 버퍼를 만들기 위해서 우선 정점의 데이터 형태를 정의할 필요가 있다. 위치와 색깔을 가지는 간단한 형태의 정점 구조체 왜 구조체의 형태여야 할까? 좀 더 원시적으로 생각해서 float Vertex[ … Read more