목차

     

     


     

     

    Index

     

     


    Index를 활용한 사각형 그리기

     

    • 0 1 2    2 1 3 순서로 그린다.

     


     

    IndexDemo 코드

     

    10_World.fx 코드는 이전글과 동일

     

    IndexDemo.h

    더보기
    #pragma once
    #include "Systems/IExecute.h"
    class IndexDemo : 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[4];
    ID3D11Buffer* vertexBuffer;
    UINT indices[6];
    ID3D11Buffer* indexBuffer;
    Matrix world;
    };

     

     

    IndexDemo.cpp

    더보기
    #include "stdafx.h"
    #include "IndexDemo.h"
    void IndexDemo::Initialize()
    {
    shader = new Shader(L"10_World.fx");
    vertices[0].Position = Vector3(-0.5f, -0.5f, 0.0f);
    vertices[1].Position = Vector3(-0.5f, +0.5f, 0.0f);
    vertices[2].Position = Vector3(+0.5f, -0.5f, 0.0f);
    vertices[3].Position = Vector3(+0.5f, +0.5f, 0.0f);
    //Create Vertex Buffer
    {
    D3D11_BUFFER_DESC desc;
    ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
    desc.ByteWidth = sizeof(Vertex) * 4;
    desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    D3D11_SUBRESOURCE_DATA subResource = { 0 };
    subResource.pSysMem = vertices;
    Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
    }
    indices[0] = 0;
    indices[1] = 1;
    indices[2] = 2;
    indices[3] = 2;
    indices[4] = 1;
    indices[5] = 3;
    //Create Index Buffer
    {
    D3D11_BUFFER_DESC desc;
    ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
    desc.ByteWidth = sizeof(UINT) * 6;
    desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
    D3D11_SUBRESOURCE_DATA subResource = { 0 };
    subResource.pSysMem = indices;
    Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &indexBuffer));
    }
    D3DXMatrixIdentity(&world);
    }
    void IndexDemo::Destroy()
    {
    SafeDelete(shader);
    SafeDelete(vertexBuffer);
    SafeDelete(indexBuffer);
    }
    void IndexDemo::Update()
    {
    }
    void IndexDemo::Render()
    {
    shader->AsScalar("Index")->SetInt(0);
    shader->AsMatrix("World")->SetMatrix(world);
    shader->AsMatrix("View")->SetMatrix(Context::Get()->View());
    shader->AsMatrix("Projection")->SetMatrix(Context::Get()->Projection());
    UINT stride = sizeof(Vertex);
    UINT offset = 0;
    D3D::GetDC()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
    D3D::GetDC()->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
    D3D::GetDC()->IASetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0);
    shader->DrawIndexed(0, 1, 6);
    }

     

     

    Main.cpp

    더보기
    #include "stdafx.h"
    #include "Main.h"
    #include "Systems/Window.h"
    #include "IndexDemo.h"
    void Main::Initialize()
    {
    Push(new IndexDemo());
    }
    void Main::Ready()
    {
    }
    void Main::Destroy()
    {
    for (IExecute* exe : executes)
    {
    exe->Destroy();
    SafeDelete(exe);
    }
    }
    void Main::Update()
    {
    for (IExecute* exe : executes)
    exe->Update();
    }
    void Main::PreRender()
    {
    for (IExecute* exe : executes)
    exe->PreRender();
    }
    void Main::Render()
    {
    for (IExecute* exe : executes)
    exe->Render();
    }
    void Main::PostRender()
    {
    for (IExecute* exe : executes)
    exe->PostRender();
    }
    void Main::ResizeScreen()
    {
    for (IExecute* exe : executes)
    exe->ResizeScreen();
    }
    void Main::Push(IExecute * execute)
    {
    executes.push_back(execute);
    execute->Initialize();
    }
    int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR param, int command)
    {
    D3DDesc desc;
    desc.AppName = L"D3D Game";
    desc.Instance = instance;
    desc.bFullScreen = false;
    desc.bVsync = false;
    desc.Handle = NULL;
    desc.Width = 1280;
    desc.Height = 720;
    desc.Background = Color(0.3f, 0.3f, 0.3f, 1.0f);
    D3D::SetDesc(desc);
    Main* main = new Main();
    WPARAM wParam = Window::Run(main);
    SafeDelete(main);
    return wParam;
    }

     

     


     

    실행화면

     

     

     

    '⭐ DirectX > DirectX11 3D' 카테고리의 다른 글

    [DirectX11] 013~014 Camera  (0) 2023.01.11
    [DirectX11] 012 Grid  (1) 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