Search This Blog

Wednesday, October 28, 2009

OpenGL의 투명 효과

OpenGL은 translucent 또는 partially opaque primite들을 rendering하기 위한 직접적인 interface를 제공하지 않는다. 그러나 blend feature와 primitive data들의 조심스러운 순서 조작과 함께 transparency effect를 구현 할 수 있다. 또한 screen door transparency를 고려 할 수도 있을 것이다.

OpenGL application을 전형적으로 다음과 같은 방법으로 blending을 enable한다.

glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

Blending이 enable된 후, 처리되는 primitive color는 framebuffer에 이미 저장되어 있는 color와 blending된다. glBlendFunc()은 어떻게 blending할 것인가를 결정한다. 위의 전형적인 예제는 현재 입력된 color를 그것의 alpha value와 1 - 입력되는 alpha value로 최종 color를 수정한다. 이 두 color의 합은 다시 framebuffer에 쓰여진다.

Primitive의 opaicty는 glColor4*()를 사용하여 설정한다. RGB는 color를 설정하고, alpha parameter는 opacity를 결정한다.

Depth buffering을 사용할 경우, primitives를 rendering하는 순서에 주의를 기울일 필요가 있다. 완벽한 opaque primitives는 가장 먼저 rendering 될 필요가 있으며, 다음은 부분적으로 opaque한 primiteves들이 뒤에서 앞으로 rendering될 필요가 있다. 만약 이런 순서로 rendering하지 않는다면, 부분적으로 opaque한 primitive를 통해 보여지는 primitive들은 그들이 depth test를 모두 잃을 수 있다.

For more information:

No comments:

Post a Comment

Blog Archive