[DirectX11] 012 Grid
목차
Grid
Grid
Vertex Count = ( width + 1 ) * ( height + 1 )
Index Count = ( width) * ( height ) * 6
GridDemo 코드
10_World.fx 코드는 이전글과 동일
GridDemo.h
더보기
#pragma once
#include "Systems/IExecute.h"
class GridDemo : 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;
UINT width = 3, height = 3;
UINT vertexCount;
Vertex* vertices;
ID3D11Buffer* vertexBuffer;
UINT indexCount;
UINT* indices;
ID3D11Buffer* indexBuffer;
Matrix world;
};
width, height 값 변경으로 사각형 그리드 크기변경 가능
GridDemo.cpp
더보기
#include "stdafx.h"
#include "GridDemo.h"
void GridDemo::Initialize()
{
shader = new Shader(L"10_World.fx");
vertexCount = (width + 1) * (height + 1);
vertices = new Vertex[vertexCount];
for (UINT y = 0; y <= height; y++)
{
for (UINT x = 0; x <= width; x++)
{
UINT i = (width + 1) * y + x;
vertices[i].Position.x = (float)x;
vertices[i].Position.y = (float)y;
vertices[i].Position.z = 0.0f;
}
}
//Create Vertex Buffer
{
D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.ByteWidth = sizeof(Vertex) * vertexCount;
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
D3D11_SUBRESOURCE_DATA subResource = { 0 };
subResource.pSysMem = vertices;
Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
}
indexCount = (width * height) * 6;
indices = new UINT[indexCount];
UINT index = 0;
for (UINT y = 0; y < height; y++)
{
for (UINT x = 0; x < width; x++)
{
indices[index + 0] = (width + 1) * y + x;
indices[index + 1] = (width + 1) * (y + 1) + x;
indices[index + 2] = (width + 1) * y + x + 1;
indices[index + 3] = (width + 1) * y + x + 1;
indices[index + 4] = (width + 1) * (y + 1) + x;
indices[index + 5] = (width + 1) * (y + 1) + x + 1;
index += 6;
}
}
//Create Index Buffer
{
D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.ByteWidth = sizeof(UINT) * indexCount;
desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
D3D11_SUBRESOURCE_DATA subResource = { 0 };
subResource.pSysMem = indices;
Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &indexBuffer));
}
SafeDeleteArray(vertices);
SafeDeleteArray(indices);
D3DXMatrixIdentity(&world);
}
void GridDemo::Destroy()
{
SafeDelete(shader);
SafeDelete(vertexBuffer);
SafeDelete(indexBuffer);
}
void GridDemo::Update()
{
}
void GridDemo::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, indexCount);
}
Main.cpp
더보기
#include "stdafx.h"
#include "Main.h"
#include "Systems/Window.h"
#include "GridDemo.h"
void Main::Initialize()
{
Push(new GridDemo());
}
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] 015 Cube (0) | 2023.01.13 |
---|---|
[DirectX11] 013~014 Camera (0) | 2023.01.11 |
[DirectX11] 011 Index (0) | 2023.01.10 |
[DirectX11] 010 World (0) | 2023.01.09 |
[DirectX11] 009 World Matrix (0) | 2023.01.08 |
댓글
이 글 공유하기
다른 글
-
[DirectX11] 015 Cube
[DirectX11] 015 Cube
2023.01.13 -
[DirectX11] 013~014 Camera
[DirectX11] 013~014 Camera
2023.01.11 -
[DirectX11] 011 Index
[DirectX11] 011 Index
2023.01.10 -
[DirectX11] 010 World
[DirectX11] 010 World
2023.01.09