PyQt OpenGL: dibujar escenas simples

Recientemente he dibujado escenas simples como triangularjs y polígonos usando PyOpenGL. El código fue bastante sencillo, y el uso de diferentes GL_TRIANGLES y GL_POLYGON no generó ninguna pregunta.

Después de eso, decidí agregar GUI a mi aplicación y descargar pyqt4. Así que ahora estoy usando QtOpenGL desde allí, y estoy atascado. Después de leer varios tutoriales, lo único que pude hacer fue esto . Aquí está el código: x

import sys import math from PyQt4 import QtCore, QtGui, QtOpenGL try: from OpenGL import GL except ImportError: app = QtGui.QApplication(sys.argv) QtGui.QMessageBox.critical(None, "OpenGL hellogl", "PyOpenGL must be installed to run this example.") sys.exit(1) class Window(QtGui.QWidget): def __init__(self): super(Window, self).__init__() self.glWidget = GLWidget() self.button = self.createButton() mainLayout = QtGui.QHBoxLayout() mainLayout.addWidget(self.glWidget) mainLayout.addWidget(self.button) self.setLayout(mainLayout) self.setWindowTitle("Hello GL") def createButton(self): button = QtGui.QPushButton("&WOOF") button.clicked.connect(self.close) return button class GLWidget(QtOpenGL.QGLWidget): def __init__(self, parent=None): super(GLWidget, self).__init__(parent) self.trolltechPurple = QtGui.QColor.fromCmykF(0.39, 0.39, 0.0, 0.0) def minimumSizeHint(self): return QtCore.QSize(100, 300) def sizeHint(self): return QtCore.QSize(400, 400) def initializeGL(self): self.qglClearColor(self.trolltechPurple.dark()) def paintGL(self): GL.glMatrixMode(GL.GL_MODELVIEW) GL.glLoadIdentity() GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) GL.glColor3f(1,0,0) GL.glRectf(-1,-1,1,0) GL.glColor3f(0,1,0) GL.glRectf(-1,0,1,1) GL.glBegin(GL_TRIANGLES) glVertex2f(3.0, 3.0) glVertex2f(5.0, 3.0) glVertex2f(5.0, 5.0) glVertex2f(6.0, 4.0) glVertex2f(7.0, 4.0) glVertex2f(7.0, 7.0) glEnd() GL.glFinish() if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_()) 

Al intentar usar, por ejemplo, GL_TRIANGLES, tengo este error:

 NameError: global name 'GL_TRIANGLES' is not defined 

Tal vez no he mirado lo suficiente, pero no encontré ninguna solución.

Así que mi pregunta es cómo puedo dibujar diferentes figuras dentro de mi QGLWidget.

Gracias por tu ayuda.

Aquí hay un ejemplo de trabajo simple para un QGLWidget de python con un botón

 from OpenGL.GL import * from OpenGL.GLU import * from PyQt4 import QtGui from PyQt4.QtOpenGL import * class MainWindow(QtGui.QWidget): def __init__(self): super(MainWindow, self).__init__() self.widget = glWidget(self) self.button = QtGui.QPushButton('Test', self) mainLayout = QtGui.QHBoxLayout() mainLayout.addWidget(self.widget) mainLayout.addWidget(self.button) self.setLayout(mainLayout) class glWidget(QGLWidget): def __init__(self, parent): QGLWidget.__init__(self, parent) self.setMinimumSize(640, 480) def paintGL(self): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() glTranslatef(-2.5, 0.5, -6.0) glColor3f( 1.0, 1.5, 0.0 ); glPolygonMode(GL_FRONT, GL_FILL); glBegin(GL_TRIANGLES) glVertex3f(2.0,-1.2,0.0) glVertex3f(2.6,0.0,0.0) glVertex3f(2.9,-1.2,0.0) glEnd() glFlush() def initializeGL(self): glClearDepth(1.0) glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glShadeModel(GL_SMOOTH) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0,1.33,0.1, 100.0) glMatrixMode(GL_MODELVIEW) if __name__ == '__main__': app = QtGui.QApplication(['Yo']) window = MainWindow() window.show() app.exec_()