실습: ColorCube 에서 출력된 결과를 보았을 때 육면체가 제대로 표현되지 않는 것을 알 수 있다. 이는 부정확한 depth 표현으로 인해 발생한 문제로 이를 해결하기 위한 방법이 Z-Buffer(Depth-Buffer) 이다.
Z-Buffer (Depth-Buffer)는 3D 컴퓨터 그래픽스에서 사용되는 기술로, 장면의 깊이 정보를 저장하여 올바른 픽셀의 렌더링 순서를 결정하는데 도움을 준다.
Z-fighting은 두 개의 객체가 거의 같은 깊이 값을 가질 때, 어떤 객체가 화면에 렌더링될지를 결정하기 어려워지는 현상이다.
이제 Z-Buffer를 ColorCube에 적용해보자.
OpenGL에서 Z-Buffer를 적용하는 방법은 매우 쉽다. 아래 코드를 추가해보자.
int main(int argc, char** argv) {
...
// GLUT_DEPTH 추가
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
...
}
void display() {
// GL_DEPTH_BUFFER_BIT 추가
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// GL_DEPTH_TEST 활성화
glEnable(GL_DEPTH_TEST);
...
}
정상적으로 육면체가 출력 되는 것을 볼 수 있다.