IT 이모저모

스텐실 버퍼

exien 2018. 3. 5. 15:27

스텐실 버퍼는 후면 버퍼 및 깊이 버퍼와 동일한 해상도를 가지고 있는 버퍼이다.

실제로는 깊이버퍼의 특정 비트를 사용하기 때문에 깊이 버퍼와 동일 하다. 

스텐실 버퍼를 D3DFMT_D24S8 다음과 같은 인자로 생성하면 깊이 버퍼에 24bit할당, 스텐실 버퍼에 8bit를 할당해서 사용하게된다. 


스텐실 테스트

(참조 & 매스크) 비교 연산자 (값 & 매스크)

(StencilRef & StencilMask) StencilFunc (스텐실 버퍼의값 & StencilWriteMask)


DX에서는 스텐실 버퍼를 유연하게 제어하기 위해서 다음과 같은 API를 제공한다.


StencilEnable     : 스텐실 버퍼를 활성화 시킨다.

True - 활성화

False - 비활성화


StencilFunc        : 스텐실 테스트가 성공 또는 실패할 조건을 결정

Never           - 항상 실패

Less            - LHS < RHS 일 경우 성공

Equal           - LHS = RHS

LessEqual    - LHS<= RHS

Greater         - LHS > RHS

NotEqual       - LHS != RHS

GreaterEqual - LHS >=RHS

Always         - 항상 성공


StencilFail          : 스텐실 테스트가 실패 했을 경우 갱신 방법

StencilZFail        : 깊이 테스트가 실패 했을 경우 갱신 방법

StencilPass        : 깊이 테스트와 스텐실 테스트가 성공 했을 경우 갱신 방법

Keep - 스텐실 버퍼 항목을 변경하지 않도록 지정(현재값 그대로 유지)

Zero - 0으로 set

Replace - 스텐실 버퍼의 값을 참조값으로 대체

Incrsat - 스텐실 버퍼 항목을 증가, 만약 증가된 값이 허용 최대 값을 넘을 경우 최대치로 고정

Decrsat - 스텐실 버퍼 항목을 감소, 만약 감소된 값이 0 보다 작을 경우 0으로 고정

Invert - 스텐실 버퍼 항목을 반전

Incr - 스텐실 버퍼 항목을 증가, 만약 증가된 값이 허용 최대 값을 넘을 경우 0으로 돌려짐

Decr - 스텐실 버퍼 항목을 감소, 만약 감소된 값이 0 보다 작을 경우 허용 최대 값으로 돌려짐


StencilWriteMask : 스텐실 버퍼에 쓰여진 값을 마스크할때 사용 (디폴트는 0xffffffff)

StencilRef           : 스텐실 참조값을 설정 (디폴트는 0)

StencilMask        : 참조값을 마스크할때 사용 (디폴트는 0xffffffff)

'IT 이모저모' 카테고리의 다른 글

Convex Hull - Graham Scan  (0) 2018.03.05
3D 평면  (0) 2018.03.05
소프트웨어 스키닝  (0) 2018.03.05
DX 11의 Stages  (0) 2018.03.05
DirectX Tools  (0) 2018.03.05