본문 바로가기

DirectX11 3D/기본 문법

<DirectX11 3D> 32. Renderer

 

필요한 개념


- Renderer : 정점 버퍼, 인덱스 버퍼, Perframe, 한번에 묶어서 관리(+ Transform)

Why? 그려질 친구들은 이 친구를 상속 받는다.

 

- PerFrame

https://cpplab.tistory.com/26

 

<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

https://cpplab.tistory.com/23

 

<DirectX11 3D> 31. Wrapper class - Vertex, Index, Constant

필요한 개념 - VertexBuffer : 정점 데이터의 정보를 저장 - IndexBuffer : 정점의 중복을 최소화하기 위해 그리는 번호를 지정 - Constant Buffer : 구조체를 변수로 묶어서 GPU로 보내기 위해 사용하는 버퍼 GP

cpplab.tistory.com

 

 

 

- Transform

https://cpplab.tistory.com/24

 

<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


 

 

 

 

 

 

 

 

 

 

 

결과