[DirectX11] 001~005 DirectX11 기초, NDC 좌표계
목차
DirectX11 기초
파이프라인
Vertex(정점) -> IA -> VS -> RS -> PS -> Pixel
IA(Input Assembler) | 스테이지를 이용해 렌더링 데이터 세팅 |
VS(Vertex Shader) | 정점의 위치 변환. NDC 공간의 사용. |
RS(Rasterization Shader) | 정점을 픽셀로 바꿔준다. 픽셀로 채워주는 과정 |
PS(Pixel Shader) | 한점 한점을 어떻게 처리할 것인가? 픽셀 하나하나를 처리하는 과정. 색을 결정하는 과정에 쓰인다. |
NDC(Nomalized Device Coordinates) 좌표계
NDC(Nomalized Device Coordinates) 좌표계란?
3D 물체가 Projection(=투영 변환)을 거쳐 2D 공간에 변환되면서 가지게되는 좌표계를 말한다.
렌더링할 화면의 해상도를 (-1~+1)까지로 정규화한 좌표여서 정규좌표라고 부르기도 한다.
Vertex Shader 단계에서 지정된 좌표(-1~1, -1~1)를 벗어난 모든 좌표는 잘라 폐기된다.
NDC를 사용하는 이유는?
화면의 해상도가 달라도 동일한 크기로 보여주기 위해 사용한다.
Visual Studio Settings
framework 속성 페이지
Visual Studio 확장 및 업데이트
HLSL Tools for Visual Studio
Folder To Solution Folder
사용법
Visual Studio 단축키 설정
단축키 설정
- Tools - Options - Keyboard
_Shader
01_Vertex.fx
더보기
struct VertexInput
{
float4 Position : Position;
};
struct VertexOutput
{
float4 Position : SV_Position;
};
VertexOutput VS(VertexInput input)
{
VertexOutput output;
output.Position = input.Position;
return output;
};
float4 PS(VertexOutput input) : SV_Target
{
return float4(1, 0, 0, 1);
};
float4 PS2(VertexOutput input) : SV_Target
{
return float4(0, 1, 0, 1);
};
float4 PS3(VertexOutput input) : SV_Target
{
return float4(0, 0, 1, 1);
};
technique11 T0
{
pass P0
{
SetVertexShader(CompileShader(vs_5._0, VS()));
SetPixelShader(CompileShader(ps_5._0, PS()));
}
pass P1
{
SetVertexShader(CompileShader(vs_5._0, VS()));
SetPixelShader(CompileShader(ps_5._0, PS2()));
}
};
technique11 T1
{
pass P0
{
SetVertexShader(CompileShader(vs_5._0, VS()));
SetPixelShader(CompileShader(ps_5._0, PS()));
}
}
UnitTest
Vertex_Line.h
더보기
#pragma once
#include "Systems/IExecute.h"
class Vertex_Line : public IExecute
{
public:
virtual void Initialize() override;
virtual void Ready() override {}
virtual void Destroy() override;
virtual void Update() override;
virtual void PreRender() override {}
virtual void Render() override;
virtual void PostRender() override {}
virtual void ResizeScreen() override {}
private:
Shader* shader;
Vertex vertices[2];
ID3D11Buffer* vertexBuffer;
};
Vertex_Line.cpp
더보기
#include "stdafx.h"
#include "Vertex_Line.h"
void Vertex_Line::Initialize()
{
shader = new Shader(L"01_Vertex.fx");
vertices[0].Position = Vector3(0.0f, 0.0f, 0.0f);
vertices[1].Position = Vector3(1.0f, 0.0f, 0.0f);
D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.ByteWidth = sizeof(Vertex) * 2;
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
D3D11_SUBRESOURCE_DATA subResource = { 0 };
subResource.pSysMem = vertices; // 그릴 데이터의 시작주소
Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
}
void Vertex_Line::Destroy()
{
SafeDelete(shader);
SafeRelease(vertexBuffer);
}
void Vertex_Line::Update()
{
}
void Vertex_Line::Render()
{
UINT stride = sizeof(Vertex);
UINT offset = 0;
D3D::GetDC()->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
D3D::GetDC()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST);
shader->Draw(1, 0, 2);
}
'⭐ DirectX > DirectX11 3D' 카테고리의 다른 글
[DirectX11] 011 Index (0) | 2023.01.10 |
---|---|
[DirectX11] 010 World (0) | 2023.01.09 |
[DirectX11] 009 World Matrix (0) | 2023.01.08 |
[DirectX11] 008 User Interface (1) | 2023.01.07 |
[DirectX11] 006~007 사각형 띄우기 (0) | 2023.01.06 |
댓글
이 글 공유하기
다른 글
-
[DirectX11] 010 World
[DirectX11] 010 World
2023.01.09 -
[DirectX11] 009 World Matrix
[DirectX11] 009 World Matrix
2023.01.08 -
[DirectX11] 008 User Interface
[DirectX11] 008 User Interface
2023.01.07 -
[DirectX11] 006~007 사각형 띄우기
[DirectX11] 006~007 사각형 띄우기
2023.01.06