ワイヤーフレームで、立方体を表示してみましょう。
カメラは、正射影です。
#!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()