응용프로그램에 의해 정의되는 클리핑 또는 관측 공간 안에 들어가는 기본 요소나 그 일부분을 결정하는 과정
3D vs 2D clipping
- 3차원 클리핑은 할 필요가 없음
정면에서 보이는 삼각형의 면만 자르면 됨
glViewport(x,y,w,h)
- x,y는 시작 좌표이고, w,h는 너비, 높이임
glStencilFunc(GLenum func, Glint ref, GLuint mask)
- func: GL_LEQUAL, GL_ALWAYS 등의 값으로 테스트 함수를 정의
- ref: 테스트를 위한 참조 값
- mask: ref와 stencil 에서 어떤 값을 사용할지 선택
glStencilMask(GLuint mask)
- 실제로 stencil 기법을 쓸 것인지(1) 말 것인지(0)를 정함
- 이 때 뎁스버퍼의 값을 바꿀 것인지에 대한 설정으로 glDepthMask()를 이용할 수 있고, 컬러마스크 이용을 위해 glColorMask()를 이용할 수도 있음
glStencilMaskSeparate(GLenum face, GLuint mask)
- Face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
- 앞면만 바꿀 것인지, 뒷면만 바꿀 것인지에 대한 옵션 설정 가능
glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass)
- 스텐실 값을 어떻게 바꿀 것인지에 대한 액션을 정의
- GL_KEEP(원래 값 사용), GL_ZERO(0으로 설정), GL_REPLACE(특정값으로 변경), GL_INCR(1 더하는 것), GL_INCR_WRAP, GL_DECR(1씩 빼는 것), GL_DECR_WRAP(음수방지), GL_INVERT(1은 0으로, 0을 1로 바꾸는 것)
- sfail: glStencilFunc에서 ref값이 펑션을 만족시키면 성공인데 그렇지 않은 경우
- dpfail: stencil test는 패스했으나, depth test는 fail
- dppss: stencil test, depth test 모두 성공
glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
- 앞면과 뒷면에 대해 함수를 다르게 설정할 수 있음
Input: Fragment + Associated Data
1. Pixel Ownership Test:
색깔이 화면에 그려질 것인지 아닌지를 결정
2. Scissor Test: 잘라낼 부분들을 잘라냄
3. Alpha Test: 투명한 것인지 불투명한 것인지
4. Stencil Test
5. Depth Test
6. Blending
7. Dithering
8. Logic Op
Output: Frame buffer로
Enjoy the energy of street art from the comfort of your device at https://www.grafftergallery.com/. Graffter Gallery's virtual space invites you to discover the bold colors and innovative styles of urban creativity. Click your way through an engaging collection that brings the streets to life on your screen.