投影矩阵不适用于pyglet

时间:2014-12-24 13:06:19

标签: python opengl matrix pyglet

我正在尝试遵循OpenGL编程指南(AKA红皮书)
但我正在使用pyglet 1.2(因为我必须使用Python进行HighSchool项目,我更喜欢python 3.4)

所以我试图让the first example of the chapter 3正常工作

我试图让我的代码与示例最接近:

import pyglet
from pyglet.gl import *

def cube(x, y, z, size):
    vertices = (GLfloat * 24) (*[x, y, z,
                                 x, y + size, z,
                                 x, y + size, z + size,
                                 x, y, z + size,
                                 x + size, y, z,
                                 x + size, y + size, z,
                                 x + size, y + size, z + size,
                                 x + size, y, z + size])

    glEnableClientState(GL_VERTEX_ARRAY)
    glVertexPointer(3, GL_FLOAT, 0, vertices)

    indices = (GLubyte * 24) (*[0, 1, 2, 3,
                                4, 5, 6, 7,
                                0, 1, 5, 4,
                                7, 6, 2, 3,
                                0, 4, 7, 3,
                                1, 5, 6, 2])

    glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, indices)
    glDisableClientState(GL_VERTEX_ARRAY)

window = pyglet.window.Window(resizable=True)

@window.event
def on_draw():
    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(1, 1, 1)
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)

    glLoadIdentity()
    gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0)
    glScalef(1, 2, 1)

    cube(50, 50, 0, 100)
    glFlush()

@window.event
def on_resize(width, height):
    glViewport(0, 0, (GLsizei) (width), (GLsizei) (height) )
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glFrustum(-1, 1, -1, 1, 1.5, 20)
    glMatrixMode(GL_MODELVIEW)

glClearColor(0, 0, 0, 0)
glShadeModel(GL_FLAT)
pyglet.app.run()

正如你所看到的,由于没有过剩,我不得不制作自己的立方体功能

所以这里的问题是只应用了ModelView Matrix 只有在其上显示glScalef方法的正方形才显示

我尝试在on_draw方法中移动Projection Matric的更改 它只是方形消失

我还尝试使用glFrustum更改模型视图matric, 这并没有改变什么

如果有人知道这个错误来自哪里, 我很高兴听到它。

0 个答案:

没有答案