python - 尝试在 pyOpenGL 中绘制一个简单的正方形

标签 python opengl pyopengl

我正在尝试使用 pyopengl 自学 OpenGL,我对尝试渲染一个以原点为中心的简单 2D 正方形感到震惊。每当我将数组值设置为大于或等于 1 时,形状就会占据整个屏幕,就好像我只查看了轴的一小部分一样。我试图将它基于用 pyopengl 重写的 NeHe 教程,但我找不到我做错了什么。

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def display():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glBegin(GL_QUADS)
    glVertex3f(2,-2,0)
    glVertex3f(2,2,0)
    glVertex3f(-2,2,0)
    glVertex3f(-2,-2,0)
    glEnd()

    glutSwapBuffers()

if __name__ == '__main__':
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
    glutInitWindowSize(640,480)
    glutCreateWindow("Hello World :'D")

    glutDisplayFunc(display)
    glutIdleFunc(display)
    glutMainLoop()

最佳答案

您需要设置投影矩阵和视口(viewport)。 Python 允许我们使用一些函数式编程以理智的方式完成它:

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def display(w, h):
    aspect = float(w)/float(h)
    glViewport(0, 0, w, h)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(-aspect * 5, aspect * 5, -5, 5, -1, 1)

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity()

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glBegin(GL_QUADS)
    glVertex3f(2,-2,0)
    glVertex3f(2,2,0)
    glVertex3f(-2,2,0)
    glVertex3f(-2,-2,0)
    glEnd()

    glutSwapBuffers()

def reshape(w, h):
    glutDisplayFunc(lambda: display(w, h))
    glutPostRedisplay();

if __name__ == '__main__':
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
    glutInitWindowSize(640,480)
    glutCreateWindow("Hello World :'D")

    glutReshapeFunc(reshape)
    glutIdleFunc(glutPostRedisplay)
    glutMainLoop()

关于python - 尝试在 pyOpenGL 中绘制一个简单的正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378297/

相关文章:

user-interface - 如何安装 opengl 才能运行

python - 使用 PyOpenGL 在 Pygame 中渲染图像

python - 如何在使用 Pycharm + Docker 测试项目时在 Python 库包上进行开发?

python - 用户如何向 QDoubleSpinBox 输入无穷大值?

python - 如何将 N 体模拟录制为视频?

c++ - Glew 和 Glut 如何激活像素格式?

opengl - Mesa 9.2.1 下的 OpenGL 3.0 精度限定符会抛出错误

python - Keras(FIT_GENERATOR)- 错误,当检查目标 : expected activation_1 to have 3 dimensions, 但得到形状为 (32, 416, 608, 3) 的数组时

python - PyOpenGL: glutTimerFunc 回调缺少必需的参数 'value'

python - Pyopengl 纹理渲染不正确,对象填充纯灰色