#include #include #if defined(WIN32) # include "glut.h" #elif defined(__APPLE__) || defined(MACOSX) # include #else # define GL_GLEXT_PROTOTYPES # include #endif #define USERASTERPOS 0 /* ** デプスバッファの表示 */ int showdepth(void) { GLint view[4]; GLubyte *buffer; /* 現在のビューポートのサイズを得る */ glGetIntegerv(GL_VIEWPORT, view); /* ビューポートのサイズ分のメモリを確保する */ buffer = (GLubyte *)malloc(view[2] * view[3]); if (buffer) { #if USERASTERPOS GLdouble model[16]; GLdouble proj[16]; GLdouble ox, oy, oz; #endif /* 画面表示の完了を待つ */ glFinish(); /* デプスバッファの読み込み */ glReadPixels(view[0], view[1], view[2], view[3], GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, buffer); /* カラーバッファへの描き込み */ #if USERASTERPOS glGetDoublev(GL_MODELVIEW_MATRIX, model); glGetDoublev(GL_PROJECTION_MATRIX, proj); gluUnProject(view[0] + 0.5, view[1] + 0.5, 0.0, model, proj, view, &ox, &oy, &oz); glRasterPos3d(ox, oy, oz); #endif glDrawPixels(view[2], view[3], GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer); /* 画面表示 */ if (glutGet(GLUT_WINDOW_DOUBLEBUFFER)) glutSwapBuffers(); /* メモリの解放 */ free(buffer); return 1; } return 0; }