필요한 개념
- Renderer : 정점 버퍼, 인덱스 버퍼, Perframe, 한번에 묶어서 관리(+ Transform)
Why? 그려질 친구들은 이 친구를 상속 받는다.
- PerFrame
<DirectX11 3D> 32. Renderer - PerFrame
필요한 개념 - Perframe : 매프레임마다 넘어가서(ConstantBuffer 활용) - 역행렬(Matrix Inverse) https://cpplab.tistory.com/27 W -> World V -> View P -> Projection 기존 방식 output.position = mul(input...
cpplab.tistory.com
- Buffer
<DirectX11 3D> 31. Wrapper class - Vertex, Index, Constant
필요한 개념 - VertexBuffer : 정점 데이터의 정보를 저장 - IndexBuffer : 정점의 중복을 최소화하기 위해 그리는 번호를 지정 - Constant Buffer : 구조체를 변수로 묶어서 GPU로 보내기 위해 사용하는 버퍼 GP
cpplab.tistory.com
- Transform
<DirectX11 3D> 32. Renderer - Transform
필요한 개념 - Transform World를 편하게 다루기 위한 class Camera 클래스와 유사 - LU Decompose https://cpplab.tistory.com/25 .h 더보기 #pragma once class Transform { public: // SRT를 사용하기 위해 Tra..
cpplab.tistory.com
.h
#pragma once
class Renderer
{
public:
Renderer(Shader* shader);
Renderer(wstring shaderFile);
virtual ~Renderer();
Shader* GetShader() { return shader; }
UINT& Pass() { return pass; }
void Pass(UINT val) { pass = val; }
virtual void Update();
virtual void Render();
Transform* GetTransform() { return transform; }
private:
void Initialize();
protected:
void Topology(D3D11_PRIMITIVE_TOPOLOGY val) { topology = val; }
protected:
Shader* shader;
// 위치
Transform* transform;
VertexBuffer* vertexBuffer = NULL;
IndexBuffer* indexBuffer = NULL;
UINT vertexCount = 0;
UINT indexCount = 0;
private:
// 외부에서 받아온 건지, 내부에서 만들어진건지
// 내부거는 삭제하고, 외부거는 냅둔다.
bool bCreateShader = false;
// 어떤식으로 그려질지
D3D11_PRIMITIVE_TOPOLOGY topology = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
UINT pass = 0;
PerFrame* perFrame;
};
.Cpp
#include "Framework.h"
#include "Renderer.h"
Renderer::Renderer(Shader* shader)
: shader(shader)
{
Initialize();
}
Renderer::Renderer(wstring shaderFile)
: bCreateShader(true)
{
shader = new Shader(shaderFile);
Initialize();
}
void Renderer::Initialize()
{
perFrame = new PerFrame(shader);
transform = new Transform(shader);
}
Renderer::~Renderer()
{
SafeDelete(perFrame);
SafeDelete(transform);
SafeDelete(vertexBuffer);
SafeDelete(indexBuffer);
if (bCreateShader == true)
SafeDelete(shader);
}
void Renderer::Update()
{
perFrame->Update();
transform->Update();
}
void Renderer::Render()
{
if (vertexBuffer != NULL)
{
vertexBuffer->Render();
if (indexBuffer != NULL)
indexBuffer->Render();
}
D3D::GetDC()->IASetPrimitiveTopology(topology);
perFrame->Render();
transform->Render();
}
.fx
결과
'DirectX11 3D > 기본 문법' 카테고리의 다른 글
| <DirectX11 3D> 35 - Bone, Mesh Data Read + Write File (0) | 2022.02.10 |
|---|---|
| <DirectX11 3D> 34. ModelEditor - Converter(Assimp) (0) | 2022.02.07 |
| <DirectX11 3D> 32. Renderer - PerFrame (0) | 2022.02.07 |
| <DirectX11 3D> 32. Renderer - Transform (0) | 2022.02.07 |
| <DirectX11 3D> 31. Wrapper class - Vertex, Index, Constant (0) | 2022.02.07 |