본문 바로가기

프로그래밍79

[DirectX] 렌더링 파이프라인 - (2) IA 단계에서 각 정점들의 정보와 그림을 그리는 방법에 대해서 저장한 버퍼를 생성해서 결과물을 만들었다. 그렇다면 이후에는 이 결과물을 다음 단계인 VS 단계로 넘겨주어야 한다. 하지만 바로 넘겨주게 되면 VS에선 이 결과물을 제대로 읽어들이지 못한다. hlsl로 작성한 VS 단계에 입력되는 매개변수의 자료형이다. 그리고 우리가 IA 단계에서 입력한 VertexBuffer에는 정점의 정보가 담겨 있다. 이 정점의 정보를 VS에서 읽어들일 수 있게 변화를 해주어야 한다. 이때 IA에서 바인딩되어야 하는 정보가 바로 InputLayout이다. 이 안에는 VS가 읽어들일 수 있는 정보로 자료를 구분해주는 역할을 한다. 위에 VertexInput 내부에 float4 자료형으로 선언된 변수들이 실제 VS 단계에서.. 2023. 1. 6.
[DirectX] 셰이더(Shader) 셰이더라고 부르는 것은 무엇일까? 책에서 정의하는 바는 다음과 같다. '3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수 혹은 알고리즘' '3D에서 원래 Vertex의 위치를 변경하거나 재질의 색상에서 다른 색상으로 변경하는 모든 행위' 쉽게 말하자면 정점을 움직이거나 색의 농담, 색조, 명함 효과를 주는 주체라는 뜻이다. 이런 셰이더에는 CG, HLSL, GLSL 등의 언어가 존재한다. 셰이더는 렌더링 파이프라인의 대부분의 단계에서 사용이 된다. 1) Vertex Shader(정점 셰이더) - 점 단위에서 연산을 하는 셰이더이다. 2D, 3D 모두 점, 선, 면으로 이루어질 수밖에 없는데, Vertex(점) 단위에서 x, y, z 좌표를 움직이거나, 색상을 바꾸는 등의 계산을.. 2023. 1. 4.
[DirectX] 렌더링 파이프라인 - (1) DirectX에서 렌더링, 즉 화면에 결과물을 출력하기 위해선 렌더링 파이프라인이라는 과정을 거쳐야 한다. 렌더링 파이프라인이란 화면에 그래픽스 결과물을 출력하기 위한 구조를 의미한다. 각 과정의 Output은 다음 과정의 Input이다. DrawCall -> IA(Input Assembler) -> VS(Vertex Shader) -> RS(Rasterizer) -> PS(Pixer Shader) -> OM(Output Merger) 더 상세한 과정이 있지만 기초적인 출력의 결과물을 확인하기 위해선 위의 과정은 반드시 필수적이다. 이 게시물에서는 IA에 대한 개념을 확인하고자 한다. IA(Input Assembler) 쉽게 정의하면 정점에 대한 정보를 입력 받는 구간이다. DX11에는 ID3D11로 시.. 2023. 1. 4.
[Game] 각도와 방향 게임에서 반사는 어떻게 구현할까? 반사는 정반사와 난반사가 있다. 정반사는 입사된 각의 완전 반대방향으로 반사가 되어 나가는 것이다. 이를 위해서 투영 벡터라는 것을 우선 알아둘 필요가 있다. 투영 벡터란, A 벡터와 B 벡터를 내적할 때, 그 결과값이 B 벡터 상에 나타나는데 이를 투영 벡터라고 한다. 사실 이 글을 작성하는 필자도 문과이고 많은 문과들이 벡터에 대한 개념을 잡기가 어려운 것을 알고 있다. 쉽게 생각하면 이와 같다. 반사를 할 때 정반사의 경우 반사각은 입사각에서 그대로 90도를 더하거나 뺀 값이 된다. 그 90도라는 것은 결국 가상의 벡터가 되어 반사각과 입사각 사이에서 중심이 된다. 이 90도를 가상의 벡터라고 가정하고 이 벡터와 입사각을 내적한 결과가 투영 벡터가 되고, 이 투영 .. 2023. 1. 1.