목차

     

     


     

     

    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