[DirectX11] Render States
by 브이담곰📌 Geometry Shader
📌 Rasterizer Stage
Geometry shader로 부터 출력된 primitive data는 rasterizer stage에 보내져, Rasterizer에 의해 렌더링 할 픽셀단위로 분해된다.
래스터라이저에서는 다음과 같은 처리를 수행한다.
- 보이지 않는 primitive 제거(은면 제거, 컬링 처리)
- 좌표의 뷰포트 변환
- 시저 테스트
- 깊이 바이어스 계산
- 프리미티브들을 렌더 타겟상의 텍셀 단위로 변경
- 멀티 샘플링이나 필 모드의 설정에 따른 처리.
✔ RS 스테이지의 동작은 `래스터 라이저 스테이트 오브젝트`에서 설정한다.
이 스테이트 오브젝트는 ID3D11RasterizerState 인터페이스에서 다룬다.
💡 Rasterizer State Object를 만드려면 D3D11_RASTERIZER_DESC 구조체를 만들고
ID3D11Device::CreateRasterizerState함수를 호출하여 생성한다.
//오브젝트 생성
D3D11_RASTERIXER_DESC RSDesc;
RSDesc.FillMode = D3D11_FILL_SOLIID; //평범하게 렌더링
✔ FiLL_WIREFRAME(wireframe 렌더링) 또는 FILL_SOLID(단색 랜더)을 넣을 수 있다. 단색이 기본 값이다.
RSDesc.CullMode = D3D11_CULL_NONE; //컬모드 하지 않음
✔ D3D10_CULL_FRONT : 앞부분을 컬링한다-> 앞부분은 렌더되지 않는다.
✔ D3D11_CULL_BACK : 뒷부분을 컬링한다 -> 뒷부분은 렌더되지 않는다.
RSDesc.FrontCounterClockwise = FALSE; // 시계방향이 뒷면임 CCW
✔ 삼각형 정점이 카메라로부터 시계방향으로 회전시키는가에 대한 bool 값이다.
RSDesc.DepthBias = 0; //깊이 바이어스 값 0
✔ 주어진 픽셀에 대한 깊이 값이다. default는 0
RSDesc.DepthBiaseClamp = 0;
✔ 최대 깊이 값이다.
RSDesc.SlopeScaledDepthBias = 0;
✔ 픽셀슬로프에 대한 스칼라 값을 지정한다.
RSDesc.DepthClipEnable = FALSE; //깊이 클리핑 없음
✔ 카메라로부터의 거리에 대한 클리핑
RSDesc.ScissorEnable = FASLE; //시저 테스트 하지 않음
✔ scissor-rectagle cilling에 대한 활성/비활성화. 모든 바깥의 픽셀들은 사각형으로 잘림되고 culled 된다(렌더x)
RSDesc..MultisampleEnable = FALSE; // 멀티 샘플링 하지 않음
RSDesc.AntialiassedLineEnable = FALSE; //라인 안티앨리어싱 없음
hr = g_pD3DDevice->CreateRasterizerState(&RSDesc, &g_pRasterizerState);
'Client > directX' 카테고리의 다른 글
[DirectX11] Texture Normal(Bump) Mapping (0) | 2022.05.31 |
---|---|
[DirectX11] DirectX 초기화 와 3D 그래픽의 이해 (0) | 2022.04.21 |
[DirectX11] 2D 원 그리기 (0) | 2021.11.10 |
[DirectX 11] 3D Transformations (0) | 2021.11.04 |
[DirectX 11] 정점 버퍼 (0) | 2021.10.06 |
블로그의 정보
농담곰담곰이의곰담농
브이담곰