ワイヤーフレームで、立方体を表示してみましょう。
カメラは、正射影です。
#!env python from OpenGL.GL import * from OpenGL.GLUT import * vertex = [ [ 0.0, 0.0, 0.0 ], [ 1.0, 0.0, 0.0 ], [ 1.0, 1.0, 0.0 ], [ 0.0, 1.0, 0.0 ], [ 0.0, 0.0, 1.0 ], [ 1.0, 0.0, 1.0 ], [ 1.0, 1.0, 1.0 ], [ 0.0, 1.0, 1.0 ]] edge = [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ], [ 3, 0 ], [ 4, 5 ], [ 5, 6 ], [ 6, 7 ], [ 7, 4 ], [ 0, 4 ], [ 1, 5 ], [ 2, 6 ], [ 3, 7 ]] def resize(w, h): glViewport(0, 0, w, h) glLoadIdentity() glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0) def draw(): glClearColor(0.0, 0.0, 1.0, 0.0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glBegin(GL_LINES) for i in range(0, 12): glVertex(vertex[edge[i][0]]) glVertex(vertex[edge[i][1]]) glEnd() glFlush() glutSwapBuffers() glutInit(sys.argv) glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(320, 320) glutCreateWindow("PyOpenGL 7") glutDisplayFunc(draw) glutReshapeFunc(resize) glutMainLoop()
glLoadIdentity()
glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0)
ワイヤーフレームの立方体をパースペクティブに表示して、キーボードで回転できるようにしてみましょう。
以下のスクリプトで、h キーを押すと Y 軸周りに 1 度回転します。
#!env python from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * vertex = [ [ 0.0, 0.0, 0.0 ], [ 1.0, 0.0, 0.0 ], [ 1.0, 1.0, 0.0 ], [ 0.0, 1.0, 0.0 ], [ 0.0, 0.0, 1.0 ], [ 1.0, 0.0, 1.0 ], [ 1.0, 1.0, 1.0 ], [ 0.0, 1.0, 1.0 ]] edge = [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ], [ 3, 0 ], [ 4, 5 ], [ 5, 6 ], [ 6, 7 ], [ 7, 4 ], [ 0, 4 ], [ 1, 5 ], [ 2, 6 ], [ 3, 7 ]] angle = 0.0 def resize(w, h): glViewport(0, 0, w, h) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(30.0, w/h, 1.0, 100.0) glMatrixMode(GL_MODELVIEW) def draw(): global angle glClearColor(0.0, 0.0, 1.0, 0.0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) glRotated(angle, 0.0, 1.0, 0.0) glBegin(GL_LINES) for i in range(0, 12): glVertex(vertex[edge[i][0]]) glVertex(vertex[edge[i][1]]) glEnd() glFlush() glutSwapBuffers() def keyboard(key, x, y): global angle if key=='q': sys.exit() if key=='h': angle += 1.0 glutPostRedisplay() glutInit(sys.argv) glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(320, 320) glutCreateWindow("PyOpenGL 8") glutDisplayFunc(draw) glutReshapeFunc(resize) glutKeyboardFunc(keyboard) glutMainLoop()
from OpenGL.GLU import *
glMatrixMode(GL_PROJECTION)
gluPerspective(30.0, w/h, 1.0, 100.0)
glMatrixMode(GL_MODELVIEW)
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
glRotated(angle, 0.0, 1.0, 0.0)
glutPostRedisplay()
import sys import rwobj(ポリゴンデータ読み込み)
obj = rwobj.readObj(sys.argv[1]) vs = rwobj.getVertex(obj) es = rwobj.getEdge(obj)(vsとesを使ってワイヤーフレームを描く)
glBegin(GL_LINES) for e1,e2 in es: glVertex(vs[e1]) glVertex(vs[e2]) glEnd()