我正在尝试使用Python学习一些基本的OpenGL,并且我一直有问题。
z值大于1的任何内容都无法正确呈现。如果每个顶点的z都大于1,则整个多边形不会渲染,如果只有一些顶点大于1,那么它会在多处传递z = 1时剪切多边形。我已经尝试使用gluperspective()
和glfrustum()
设置我的远剪裁平面,但似乎都没有这样做。
编辑:我尝试在on_draw
和on_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()
这就是打印出来的内容:
我尝试了很多不同的东西,我不知道还有什么可以尝试的。这有什么问题?
答案 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)))