7. Rasterizer, Depth/ Stencil, Ble

MwG·2025년 1월 1일

DirectX11

목록 보기
7/7

레스터라이져 설명

레스터라이져 Desc

//  래스터라이저 스테이트 오브젝트 생성

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);

Desc와 모드에 관한 더 상세한 설명

Blend

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());

Blend Desc에 관한 상세한 설명

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);

Depth/Stencil Desc 상세 설명

<참고자료>
얌얌 코딩 수업노트

0개의 댓글