응애맘마조

230727 강의 본문

공부/3D강의

230727 강의

TH.Wert 2023. 7. 27. 18:50

이제 터레인으로써 맵 에디터는 어제일자로 마무리가 되었고 오늘부터 배경을 위한 큐브맵을 스카이 박스에 적용시키기 위한 강의를 했었습니다.

#pragma once
class RasterState :public Singleton<RasterState>
{
private:
	ID3D11RasterizerState* CullBackFillSolid;
	ID3D11RasterizerState* CullFrontFillSolid;
	ID3D11RasterizerState* CullNoneFillSolid;
	ID3D11RasterizerState* CullBackWireFrame;
	ID3D11RasterizerState* CullFrontWireFrame;
	ID3D11RasterizerState* CullNoneWireFrame;

public:
	RasterState();
	~RasterState();
	void Set(D3D11_CULL_MODE cull = D3D11_CULL_BACK,
		D3D11_FILL_MODE fill = D3D11_FILL_SOLID);
};
#include "framework.h"

RasterState::RasterState()
{

	D3D11_RASTERIZER_DESC desc;
	ZeroMemory(&desc, sizeof(D3D11_RASTERIZER_DESC));
	desc.FillMode = D3D11_FILL_SOLID;
	desc.CullMode = D3D11_CULL_FRONT;
	D3D->GetDevice()->CreateRasterizerState(&desc, &CullFrontFillSolid);
	desc.CullMode = D3D11_CULL_NONE;
	D3D->GetDevice()->CreateRasterizerState(&desc, &CullNoneFillSolid);
	desc.CullMode = D3D11_CULL_BACK;
	D3D->GetDevice()->CreateRasterizerState(&desc, &CullBackFillSolid);

	desc.FillMode = D3D11_FILL_WIREFRAME;
	desc.CullMode = D3D11_CULL_FRONT;
	D3D->GetDevice()->CreateRasterizerState(&desc, &CullFrontWireFrame);
	desc.CullMode = D3D11_CULL_NONE;
	D3D->GetDevice()->CreateRasterizerState(&desc, &CullNoneWireFrame);
	desc.CullMode = D3D11_CULL_BACK;
	D3D->GetDevice()->CreateRasterizerState(&desc, &CullBackWireFrame);
}

RasterState::~RasterState()
{
	SafeRelease(CullBackFillSolid);
	SafeRelease(CullFrontFillSolid);
	SafeRelease(CullNoneFillSolid);
}

void RasterState::Set(D3D11_CULL_MODE cull, D3D11_FILL_MODE fill)
{
	if (fill == D3D11_FILL_SOLID)
	{
		if (cull == D3D11_CULL_BACK)
			D3D->GetDC()->RSSetState(CullBackFillSolid);
		else if (cull == D3D11_CULL_FRONT)
			D3D->GetDC()->RSSetState(CullFrontFillSolid);
		else if (cull == D3D11_CULL_NONE)
			D3D->GetDC()->RSSetState(CullNoneFillSolid);
	}
	else
	{
		if (cull == D3D11_CULL_BACK)
			D3D->GetDC()->RSSetState(CullBackWireFrame);
		else if (cull == D3D11_CULL_FRONT)
			D3D->GetDC()->RSSetState(CullFrontWireFrame);
		else if (cull == D3D11_CULL_NONE)
			D3D->GetDC()->RSSetState(CullNoneWireFrame);
	}
}

픽셀화를 담당하는 래스터라이저에서 관리하도록 따로 클래스를 만들었습니다.

#pragma once
class Sky : public Actor
{
public:
	shared_ptr<Texture> texCube;
	static Sky*		Create(string name = "Sky");
	virtual void	Render() override;
};
#include "Sky.h"
#include "framework.h"

Sky* Sky::Create(string name)
{
	Sky* temp = new Sky();
	temp->name = name;

	temp->mesh = RESOURCE->meshes.Load("0.Cube.mesh");
	temp->shader = RESOURCE->shaders.Load("0.Sky.hlsl");

	temp->texCube = make_shared<Texture>();
	temp->texCube->LoadFile("sky.dds");
	temp->texCube->LoadFile("sky.dds");

	return temp;
}

void Sky::Render()
{
	DEPTH->Set(false);
	BLEND->Set(true);
	RASTER->Set(D3D11_CULL_FRONT);
	texCube->Set(4);
	Actor::Render();
	RASTER->Set(D3D11_CULL_BACK);
	DEPTH->Set(true);
	BLEND->Set(false);
}

mesh와 hlsl 파일이 추가되었습니다. 아직 이대로는 큐브맵을 실행할 수 없습니다. 아직 설명이 더 필요해서 이대로 끝났습니다.

 

읽어주셔서 감사합니다.

'공부 > 3D강의' 카테고리의 다른 글

230731 강의  (0) 2023.07.31
230728 강의  (0) 2023.07.28
230726 강의  (0) 2023.07.26
230725 강의  (0) 2023.07.25
230724 강의  (0) 2023.07.24
Comments