我无法获得gluLookAt
的工作。我有下面的代码使用glTranslatef
预期其工作原理:从glTranslatef切换到gluLookAt后,opengl不会呈现所需的输出
import pyglet
from pyglet.gl import *
window = pyglet.window.Window()
def draw_square():
glBegin(GL_QUADS)
glVertex3f(0, 0, 0.0)
glVertex3f(100, 0, 0.0)
glVertex3f(100, 100, 0.0)
glVertex3f(0, 100, 0.0)
glEnd()
def on_draw():
window.clear()
draw_square()
from pyglet.window import key
@window.event
def on_key_press(symbol, modifiers):
SHIFT_X_BY = 5.5
if symbol == key.LEFT:
glTranslatef(-SHIFT_X_BY, 0.0, 0.0)
elif symbol == key.RIGHT:
glTranslatef(SHIFT_X_BY, 0.0, 0.0)
elif symbol == key.UP:
glTranslatef(0.0, SHIFT_X_BY, 0.0)
elif symbol == key.DOWN:
glTranslatef(0.0, -SHIFT_X_BY, 0.0)
window.on_draw = on_draw
pyglet.app.run()
现在,而不是使用glTranslatef
我想我可以只移动相机。我修改了代码调用gluLookAt
代替:
import pyglet
from pyglet.gl import *
window = pyglet.window.Window(resizable=True)
def draw_square():
glBegin(GL_QUADS)
glVertex3f(0, 0, 0.0)
glVertex3f(100, 0, 0.0)
glVertex3f(100, 100, 0.0)
glVertex3f(0, 100, 0.0)
glEnd()
def on_draw():
window.clear()
draw_square()
pos = {'x': 0, 'y': 0, 'z': 0}
from pyglet.window import key
@window.event
def on_key_press(symbol, modifiers):
global pos
SHIFT_X_BY = 5.5
if symbol == key.LEFT:
pos['x'] = pos['x'] + SHIFT_X_BY
elif symbol == key.RIGHT:
pos['x'] = pos['x'] - SHIFT_X_BY
elif symbol == key.UP:
pos['y'] = pos['y'] + SHIFT_X_BY
elif symbol == key.DOWN:
pos['y'] = pos['y'] - SHIFT_X_BY
gluLookAt(pos['x'], pos['y'], pos['z'], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
window.on_draw = on_draw
pyglet.app.run()
但是,如果我现在按箭头键之一,广场就会消失。我打电话给gluLookAt
有什么问题?
编辑这下面on_draw()
功能不起作用或者(我只看到一个黑色的屏幕):
def on_draw():
glLoadIdentity()
gluLookAt(pos['x'], pos['y'], pos['z'], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
draw_square()
我改变了代码,但是一旦我按下方向键,方块仍然会消失。 – memyself 2012-03-27 13:25:55
另一个问题可能是,您从不重置模型视图矩阵。如果我在'draw_square'调用之前添加'glLoadIdentity()',似乎你多次调用gluLookAt,而没有像glLoadIdentity() – 2012-03-27 13:36:53
那样的事情,那么什么都不会发生。 – memyself 2012-03-27 13:41:39