PyOpenGL はじめました:animation
PyOpenGL はじめました《記事一覧》
animation
《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2006/09/21 ● 第1版♪2009/04/07
■ 概要
アニメーション効果を利用して、立体が動く様子を表現できます。
事例:アニメーション
$ python2.5 animatiecolorCube.py
立方体が回転します | |
事例:コードの解説
#! /usr/bin/python2.5
from PyoGL.Goodies.PyoWindow import *
from time import sleep
class ex_animatiecolorCube(object):
_angle = 0.0
_frameRate = 25
def __init__(self, *args):
if args:
args = map(float, *args)
else:
args = 1, 1, 1
self._args = args
引数 args には、回転軸を指定できます。引数を省略すると、1,1,1 を指定したものと見なされます。すると、原点(立方体の中心)とその対角(黄色の頂点)を結ぶ直線が、回転軸になります。
■ examples
@classmethod def ex1(self): model = ex_animatiecolorCube() w = PyoWindow(model) w.open(800,100,200,200, displayMode= GLUT_RGB | GLUT_DEPTH, )ウィンドウ PyoWindow を開いて、その中にモデル ex_animatiecolorCube を表示します。
■ glutDisplayFunc
def display(self): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-2, 2, -2, 2, -2, 2) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glRotatef(self._angle, *self._args) self._drawElements() glutSwapBuffers() def _drawElements(self): vertices = [ -1,-1, 1, -1,1, 1, 1,1, 1, 1,-1, 1, -1,-1,-1, -1,1,-1, 1,1,-1, 1,-1,-1, ] colors = [ 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, # black, red, yellow, green 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, # blue, magenta, white, cyan ] indices = [ 0, 3, 2, 1, 2, 3, 7, 6, 0, 4, 7, 3, 1, 2, 6, 5, 4, 5, 6, 7, 0, 1, 5, 4, ] glEnableClientState(GL_COLOR_ARRAY) glEnableClientState(GL_VERTEX_ARRAY) glColorPointer(3, GL_FLOAT, 0, colors) glVertexPointer(3, GL_FLOAT, 0, vertices) glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, indices) glDisableClientState(GL_COLOR_ARRAY) glDisableClientState(GL_VERTEX_ARRAY)ウィンドウを再描画する関数を規定します。 ⇒ 続きはこちら 》glutDisplayFunc《 で
■ glutKeyboardFunc
def keyboard(self, *args): frameRate = self._frameRate key, x, y = args if key == '\x1b': # escape exit() if key == '<': frameRate /= 2 if frameRate<1: frameRate = 1 if key == '>': frameRate *= 2 self._frameRate = frameRate glutPostRedisplay()キーボード操作に呼応する関数を規定します。 ⇒ 続きはこちら 》glutKeyboardFunc《 で
■ glutIdleFunc
def idle(self): angle = self._angle angle += 1 if angle > 360: angle %= 360 self._angle = angle sleep(1 / float(self._frameRate)) glutPostRedisplay()イベントが発生していないときに起動される関数を規定します。 ⇒ 続きはこちら 》glutIdleFunc《 で
■ misc
## ---------------------------------------- private def _init(self): glClearColor(0,0,0,0) glEnable(GL_DEPTH_TEST)
Tips
》作業中です《Last updated♪09/05/14