응애맘마조
230727 강의 본문
이제 터레인으로써 맵 에디터는 어제일자로 마무리가 되었고 오늘부터 배경을 위한 큐브맵을 스카이 박스에 적용시키기 위한 강의를 했었습니다.
#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 파일이 추가되었습니다. 아직 이대로는 큐브맵을 실행할 수 없습니다. 아직 설명이 더 필요해서 이대로 끝났습니다.
읽어주셔서 감사합니다.
Comments