PyQt4でOpenGL
とりあえず、簡単なサンプルを作成した。
# coding: cp932 import sys from PyQt4 import QtCore, QtGui, QtOpenGL from OpenGL import GL, GLU, GLUT r = 0.0 light_ambient = [1.0, 1.0, 1.0, 1.0] # 環境光(白色) light_diffuse = [1.0, 1.0, 1.0, 1.0] # 拡散光(白色) light_specular = [1.0, 1.0, 1.0, 1.0] # 鏡面光(白色) light_position = [2.0, 2.0, 1.0, 1.0] # 照明の位置 class GLWidget(QtOpenGL.QGLWidget): def __init__(self, parent=None): QtOpenGL.QGLWidget.__init__(self, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers), parent) def initializeGL(self): self.qglClearColor(QtGui.QColor.fromCmykF(0.39, 0.39, 0.0, 0.0)) GL.glClearDepth(1.0) #GL.glShadeModel(GL.GL_FLAT) GL.glShadeModel(GL.GL_SMOOTH) GL.glDepthFunc(GL.GL_LESS) GL.glEnable(GL.GL_DEPTH_TEST) GL.glEnable(GL.GL_CULL_FACE) GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, light_ambient) GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, light_diffuse) GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, light_specular) GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_position) GL.glEnable(GL.GL_LIGHTING) # ライティングを有効にする GL.glEnable(GL.GL_LIGHT0) # 0番目の照明を有効にする timer = QtCore.QTimer(self) self.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("updateGL()")) timer.start(16) def paintGL(self): global r GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) GL.glPushMatrix() GL.glRotated(r, 0.0, 1.0, 0.0) GLUT.glutSolidTorus(0.3, 0.5, 30, 30) GL.glPopMatrix() r += 1.0 if r > 360.0: r = 0.0 def resizeGL(self, width, height): side = min(width, height) GL.glViewport((width - side) / 2, (height - side) / 2, side, side) GL.glMatrixMode(GL.GL_PROJECTION) GL.glLoadIdentity() GL.glOrtho(-1.0, 1.0, -1.0, 1.0, -10.0, 10.0) GL.glMatrixMode(GL.GL_MODELVIEW) class MainWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) widget = GLWidget(self) self.setCentralWidget(widget) self.setWindowTitle(self.tr("Qt GL")) self.resize(400, 300) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
glOrthoとgluLookAt
glOrthoとgluLookAtは以下が参考になる。
- シミュレーション屋のためのOpenGL入門プログラミング (http://www.nda.ac.jp/cc/users/iwase/OLD/COMP/OpenGL/glhowto.html#22)
- MFCによるOpenGLプログラミング (http://odalab.spub.chitose.ac.jp/~oda/lang/opengl_obj.html)