DX11 3D Game Programming
2020_1110 Model Outline
HI2
2020. 11. 10. 05:47
[소스코드]
drive.google.com/file/d/1lgCmV3CTkOW-_ML6MG0J61mgLXhGZ51O/view?usp=sharing
1. DepthStencilState
더보기
#pragma once
class DepthStencilState
{
public:
enum Mode
{
OFF,
WRITE,
MASK
};
////////////////////////////////////
public:
void SetMode(Mode mode);
};
////////////////////////////////////////////////////////////////////////
void DepthStencilState::SetMode(Mode mode)
{
desc = CD3D11_DEPTH_STENCIL_DESC{ CD3D11_DEFAULT{} };
//
switch (mode)
{
case DepthStencilState::OFF:
break;
case DepthStencilState::WRITE:
{
desc.StencilEnable = TRUE;
desc.StencilWriteMask = 0xFF;
//
desc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
desc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;
}
break;
case DepthStencilState::MASK:
{
desc.DepthEnable = FALSE;
//
desc.StencilEnable = TRUE;
desc.StencilReadMask = 0xFF;
//
desc.FrontFace.StencilFunc = D3D11_COMPARISON_NOT_EQUAL;
desc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
}
break;
}
//
Changed();
}
2. Render OutLine
더보기
<Xbot.h>
private:
DepthStencilState* depthStencilState;
float outlineScale;
///////////////////////////////////////////////////////////////////////////////////
<Xbot.cpp>
void Xbot::RenderOutLine()
{
SetShader(L"OutLine");
//
scale *= outlineScale;
//
depthStencilState->SetMode(DepthStencilState::MASK);
depthStencilState->SetState();
Render();
depthStencilState->SetMode(DepthStencilState::OFF);
depthStencilState->SetState();
//
scale /= outlineScale;
//
SetShader(L"ModelAnimation");
}
3. RenderTarget Scene
더보기
void RenderTargetScene::PreRender()
{
renderTarget->Set(depthStencil);
//
skyBox->Render();
terrain->Render();
//
xbot->RenderOutLine();
xbot->Render();
}