렌더 상태란 렌더링 파이프라인의 특정 측면의 구성에 쓰이는 관련 상태들을 의미한다. Direct3D는 렌더 상태를 상태 집합으로 묶어서 관리한다.
다음은 주요 상태 집합을 대표하는 인터페이스들이다.
- ID3D11RasterizerState : 파이프라인의 래스터라이저 단계를 구성하는 데 쓰이는 설정들을 묶은 상태 집합
- ID3D11BlendState : 혼합 연산을 구성하는 데 쓰이는 상태 집합(84장 참고)
- ID3D11DepthStencilState : 깊이, 스텐실 판정을 구성하는 데 쓰이는 상태 집합
지금은 래스터라이저단계에 초점을 두자. 래스터라이저단계의 구성을 위한 ID3D11RasterizerState 인터페이스를 생성할 때는 D3D11_RASTERIZER_DESC 구조체를 채워서 다음 메서드를 호출한다.
HRESULT ID3D11Device::CreateRasterizerState(
const D3D11_RASTERIZER_DESC* pRasterizerDesc,
ID3D11RasterizerState** ppRasterizerState
);
1.pRasterizerDesc : 래스터라이저 상태 집합을 서술하는 구조체(*주 1)
2.ppRasterizerState : 생성된 래스터라이저 상태 개체에 대한 포인터 주소
래스터라이저 상태 개체를 생성했다면, ID3D11DeviceContext::RSSetState 메소드를 호출하여 장치에 새 상태 집합을 설정할 수 있다.
void ID3D11DeviceContext::RSSetState(ID3D11RasterizerState* pRasterizerState);
하나의 응용 프로그램에 여러 개의 서로 다른 ID3D11RasterizerState 객체가 필요할 수 있다. 예를 들어 와이어프레임 모드로 그리는 객체와 고형체로 그리는 객체가 구분되어 있을 때, 와이어프레임 객체를 먼저 그리고 래스터화기 상태를 바꾼 후 고형체 객체를 그리면 된다.
ID3D11RasterizerState* mWireframeRs; //와이어프레임 모드
ID3D11RasterizerState* mSolidRs; //고형체 모드
D3D11_RASTERIZER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_RASTERIZER_DESC));
desc.FillMode = D3D11_FILL_WIREFRAME; //와이어프레임 모드 설정
desc.CullMode = D3D11_CULL_BACK; //후면 삼각형 제외
desc.FrontCounterClockwise = false; //삼각형의 정점의 순서가 시계방향이면 전면 삼각형
desc.DepthcilpEnable = true;
HR(md3dDevice->CreateRasterizerState(&desc, &mWireframeRs));
desc.FillMode = D3D11_FILL_SOLID; //고형체 모드 설정
HR(md3dDevice->CreateRasterizerState(&desc, &mSolidRs));
md3dImmediateContext->RSSetState(mWireframeRs); //래스터화기 상태를 와이어프레임 모드로
DrawWireframeObject(); //와이어프레임 객체 그리기
md3dImmediateContext->RSSetState(mSolidRs); //래스터화기 상태를 고형체 모드로
DrawSolidObject(); //고형체 객체 그리기
(*주 1)D3D11_RASTERIZER_DESC 구조체
래스터라이저 상태를 설명한다.
typedef struct D3D11_RASTERIZER_DESC
{
D3D11_FILL_MODE FillMode;
D3D11_CULL_MODE CullMode;
BOOL FrontCounterClockwise;
INT DepthBias;
FLOAT DepthBiasClamp;
FLOAT SlopeScaledDepthBias;
BOOL DepthClipEnable;
BOOL ScissorEnable;
BOOL MultisampleEnable;
BOOL AntialiasedLineEnable;
} D3D11_RASTERIZER_DESC;
1.FillMode : 렌더링할 때 살용할 채우기 모드를 결정
2.CullMode : 지정된 방향을 향한 삼각형이 그려지지 않음을 결정
3.FrontCounterClockwise : 삼각형의 앞면 뒷면 결정
4.DepthBias : 픽셀에 추가된 깊이 값
5.DepthBiasClamp : 픽셀의 최대 깊이
6.SlopeScaledDepthBias : 픽셀의 기울기에 대한 스칼라값
7.DepthClipEnable : 깊이에 따라 클리핑을 활성화 여부
8.ScissorEnable : 가위-사각 컬링 활성화 여부
9.MultisampleEnable : 멀티 샘플 안티앨리어싱(MSAA) 렌더 대상에서 사변형 또는 알파 라인 안티앨리어싱 활성화 여부
10.AntialiasedLineEnable : 라인 안티앨리어싱 활성화 여부
'서적 정리 > DirectX11을 이용한 3D 게임 프로그래밍 입문' 카테고리의 다른 글
53.도형 예제 (0) | 2022.02.15 |
---|---|
52.언덕 예제 (0) | 2022.02.15 |
51.상자 예제 (0) | 2022.02.15 |
50.효과 프레임워크(Effect Framework) (0) | 2022.02.10 |
48.예제 픽셀 셰이더 (0) | 2022.02.08 |
47.상수 버퍼(Constant Buffer) (0) | 2022.02.08 |
46.예제 정점 셰이더 (0) | 2022.02.08 |
45.인덱스와 인덱스 버퍼(Index Buffer) (0) | 2022.02.08 |
댓글