Pythonでロゴの視覚化を作成しようとしています。画像が常に画面の中央に「向き」、画像が一定のパスを移動するように、3D空間で多数の画像をアニメーション化したいと思います。以前、 Vizardを使用してPythonでこれを実行しましたが、これを「無料」のクロスプラットフォームマナーで実行したいと思います。
pygletを使用して、画像化されたマップされたクワッドへのハンドルを取得し、そのクワッドの位置と方向を操作できる最も速い(最短のコードを読み取る)のは何ですか?
Pythonでロゴの視覚化を作成しようとしています。画像が常に画面の中央に「向き」、画像が一定のパスを移動するように、3D空間で多数の画像をアニメーション化したいと思います。以前、 Vizardを使用してPythonでこれを実行しましたが、これを「無料」のクロスプラットフォームマナーで実行したいと思います。
pygletを使用して、画像化されたマップされたクワッドへのハンドルを取得し、そのクワッドの位置と方向を操作できる最も速い(最短のコードを読み取る)のは何ですか?
以下は、画像を位置 (0, 0, -10) に配置できる最も単純なコードです。
#!/usr/bin/env python
import pyglet
from pyglet.gl import *
window = pyglet.window.Window()
glEnable(GL_DEPTH_TEST)
image = pyglet.image.load('imgs/appfolio.png')
texture = image.get_texture()
glEnable(texture.target)
glBindTexture(texture.target, texture.id)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.width, image.height,
0, GL_RGBA, GL_UNSIGNED_BYTE,
image.get_image_data().get_data('RGBA', image.width * 4))
rect_w = float(image.width) / image.height
rect_h = 1
@window.event
def on_draw():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
glTranslatef(0, 0, -10)
glBindTexture(texture.target, texture.id)
glBegin(GL_QUADS)
glTexCoord2f(0.0, 0.0); glVertex3f(-rect_w, -rect_h, 0.0)
glTexCoord2f(1.0, 0.0); glVertex3f( rect_w, -rect_h, 0.0)
glTexCoord2f(1.0, 1.0); glVertex3f( rect_w, rect_h, 0.0)
glTexCoord2f(0.0, 1.0); glVertex3f(-rect_w, rect_h, 0.0)
glEnd()
def on_resize(width, height):
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(65.0, width/float(height), 0.1, 1000.0)
glMatrixMode(GL_MODELVIEW)
window.on_resize = on_resize # we need to replace so can't use @window.event
pyglet.app.run()
私が見つけた最も困難な部分は、デフォルトの正投影が機能しないため、期待どおりに機能するために on_resize 関数を置き換える必要があることでした。
テクスチャ マッピングに関する NeHe チュートリアルの Jess Hillによるpyglet 変換が最も役立つことがわかりました。
完全なロゴ ビジュアライゼーション コードは、私が最近書いた「Moving Images in 3D Space with Pyglet」というタイトルのブログ エントリにあります。