没有大于1的z值在OpenGL(Pyglet)中渲染

时间:2014-10-05 20:39:38

标签: python opengl pyglet

我正在尝试使用Python学习一些基本的OpenGL,并且我一直有问题。

z值大于1的任何内容都无法正确呈现。如果每个顶点的z都大于1,则整个多边形不会渲染,如果只有一些顶点大于1,那么它会在多处传递z = 1时剪切多边形。我已经尝试使用gluperspective()glfrustum()设置我的远剪裁平面,但似乎都没有这样做。

编辑:我尝试在on_drawon_resize中放置打印语句,是的,它们都被称为

这是我的代码:

import pyglet
from pyglet.gl import *

window = pyglet.window.Window(width=1000, height=600, resizable=True)


@window.event
def on_resize(width, height):
    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(65, width / float(height), .1, 1000)
    glMatrixMode(GL_MODELVIEW)
    #return pyglet.event.EVENT_HANDLED   <Saw on a tutorial, but nothing renders if enabled

@window.event
def on_draw():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    glBegin(GL_QUADS)

    glColor3f(1.0, 0.0, 0.0)
    glVertex3f(400, 400, 10)
    glVertex3f(200, 400, 1)
    glVertex3f(200, 200, 1)
    glVertex3f(400, 200, 0)

    glEnd()


glEnable(GL_DEPTH_TEST)
pyglet.app.run()


这就是打印出来的内容:

我尝试了很多不同的东西,我不知道还有什么可以尝试的。这有什么问题?

1 个答案:

答案 0 :(得分:0)

如果其他人遇到此问题,请尝试使用pyglet.graphics而不是直接与OpenGL交互,我不知道为什么,但这解决了它。如果您仍然没有看到任何内容,请尝试将z值设置为较大的负z值。我试了200而且它出现了。

pyglet.graphics.draw(4, GL_QUADS, ('v3f',
                                  (40, 40, -200,
                                   20, 40, -200,
                                   20, 20, -200,
                                   40, 20, -200)))