PyOpenGL 深度测试不执行任何操作
PyOpenGL depth test doesn't do anything
我在这里初始化深度测试:
def _initGL(self):
glEnable(GL_DEPTH_TEST)
glDepthMask(GL_TRUE)
glDepthFunc(GL_NEVER)
glDepthRange(0.0, 1.0)
glClearDepth(1.0)
然后,稍后我会显示一些几何图形
def _display(self):
print(glGetBooleanv(GL_DEPTH_TEST))
print(glGetIntegerv(GL_DEPTH_FUNC)==GL_NEVER)
print(glGetFloatv(GL_DEPTH_RANGE))
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glUseProgram(self._program)
#This is a wrapped VBO doing the drawing. That actually works.
self._buffer.draw()
glutSwapBuffers()
打印的输出是
1
True
[0. 1.]
所以毫无疑问,深度测试已经开启并设置为永远不会让任何片段通过,但是:
编辑:我只是在 windows 机器上 运行 它(这是在 Ubuntu 上完成的)并且一切正常。
可能默认的帧缓冲区 (Ubuntu) 没有深度缓冲区。您必须通过 glutInitDisplayMode
, before the OpenGL window is created by glutCreateWindow
.
指定显示模式
GLUT_DEPTH
选择带有深度缓冲区的 window。例如:
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE)
我在这里初始化深度测试:
def _initGL(self):
glEnable(GL_DEPTH_TEST)
glDepthMask(GL_TRUE)
glDepthFunc(GL_NEVER)
glDepthRange(0.0, 1.0)
glClearDepth(1.0)
然后,稍后我会显示一些几何图形
def _display(self):
print(glGetBooleanv(GL_DEPTH_TEST))
print(glGetIntegerv(GL_DEPTH_FUNC)==GL_NEVER)
print(glGetFloatv(GL_DEPTH_RANGE))
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glUseProgram(self._program)
#This is a wrapped VBO doing the drawing. That actually works.
self._buffer.draw()
glutSwapBuffers()
打印的输出是
1 True [0. 1.]
所以毫无疑问,深度测试已经开启并设置为永远不会让任何片段通过,但是:
编辑:我只是在 windows 机器上 运行 它(这是在 Ubuntu 上完成的)并且一切正常。
可能默认的帧缓冲区 (Ubuntu) 没有深度缓冲区。您必须通过 glutInitDisplayMode
, before the OpenGL window is created by glutCreateWindow
.
指定显示模式
GLUT_DEPTH
选择带有深度缓冲区的 window。例如:
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE)