// 래스터라이저 스테이트 오브젝트 생성
D3D11_RASTERIZER_DESC RSDesc;
RSDesc.FillMode = D3D11_FILL_SOLID; // 평범하게 렌더링
RSDesc.CullMode = D3D11_CULL_NONE; // 컬모드 하지 않음
RSDesc.FrontCounterClockwise = FALSE; // 시계방향이 뒷면임 CCW
RSDesc.DepthBias = 0; //깊이 바이어스 값 0
RSDesc.DepthBiasClamp = 0;
RSDesc.SlopeScaledDepthBias = 0;
RSDesc.DepthClipEnable = FALSE; // 깊이 클리핑 없음
RSDesc.ScissorEnable = FALSE; // 시저 테스트 하지 않음
RSDesc.MultisampleEnable = FALSE; // 멀티 샘플링 하지 않음
RSDesc.AntialiasedLineEnable = FALSE; // 라인 안티앨리어싱 없음
hr = g_pD3DDevice->CreateRasterizerState(&RSDesc, &g_pRasterizerState);
output merger에 대한 설명(깊이,스텐실,블렌딩)
Blend Desc
D3D11_BLEND_DESC bsDesc = {};
bsDesc.AlphaToCoverageEnable = false; //멀티 샘플링에서 알파값 사용 유무
bsDesc.IndependentBlendEnable = false; // False -> 렌더타겟의 0번쨰만 사용 (1~7 번째는 무시)
// 0번 렌더타겟에 대한 블렌드 상태 설정 (0~7 번까지 설정 가능하다)
bsDesc.RenderTarget[0].BlendEnable = true;
bsDesc.RenderTarget[0].SrcBlend = D3D11_BLEND::D3D11_BLEND_SRC_ALPHA;
bsDesc.RenderTarget[0].DestBlend = D3D11_BLEND::D3D11_BLEND_INV_SRC_ALPHA;
bsDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP::D3D11_BLEND_OP_ADD;
bsDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND::D3D11_BLEND_ONE;
bsDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND::D3D11_BLEND_ZERO;
bsDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP::D3D11_BLEND_OP_ADD;
bsDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE::D3D11_COLOR_WRITE_ENABLE_ALL;
GetDevice()->CreateBlendState(&bsDesc, blendStates[(UINT)eBlendState::AlphaBlend].GetAddressOf());
Depth/Stencil Desc
ID3D11DepthStencilState* g_pDepthStencilState = NULL;
D3D11_DEPTH_STENCIL_DESC DepthStencilDesc;
DepthStencilDesc.DepthEnable = TRUE; //깊이 테스트 활성화
DepthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; //쓰기
DepthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS; // 앞쪽물체를 렌더링
DepthStencilDesc.StencilEnable = FALSE; //스텐실 테스트 비활성화
DepthStencilDesc.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK; //스텐실 읽기 마스크
DepthStencilDesc.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK; //스텐실 쓰기 마스크
// 면이 앞을 보고 있을 경우 스텐실 테스트 설정
DepthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; //유지
DepthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; //유지
DepthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; //유지
DepthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; //항상 성공
//면이 뒤를 보고 있을경우 스텐실 테스트 설정
DepthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; //유지
DepthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; //유지
DepthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; //유지
DepthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; //항상 성공
g_pd3dDevice->CreateDepthStencilState(&DepthStencilDesc,&g_pDepthStencilState);
<참고자료>
얌얌 코딩 수업노트