2017/09/04(月) [n年前の日記]
#1 [python][pi3d] pi3dでハローワールド
せっかく Windows上でも pi3d が動くようになったので、少し使い方を調べてみたり。
◎ 球を出す。 :
_pi3dの公式ドキュメント
に従って、ウインドウを生成して球を出してみたり。こんな感じに。
一応、ESCキーを押したら終了するようにしてある。じゃないとスクリプトを簡単に終了させられないので。
ソースは以下。
_helloworld.py
python helloworld.py で実行できる。
Windows10 x64上だけではなく、以下の環境でも同じように表示された。
一応、ESCキーを押したら終了するようにしてある。じゃないとスクリプトを簡単に終了させられないので。
ソースは以下。
_helloworld.py
u""" pi3d Hello World. 球を生成して描画するサンプル。 ESCキーで終了する。 Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import pi3d # ウインドウ生成 display = pi3d.Display.create(w=640, h=480, frames_per_second=60) # 球を生成 ball = pi3d.Sphere(z=5.0) # キーボード取得用クラスを生成 keys = pi3d.Keyboard() # メインループ while display.loop_running(): # 球を描画 ball.draw() if keys.read() == 27: # ESCキーが押されたらループを抜けて終了 keys.close() display.destroy() break
python helloworld.py で実行できる。
Windows10 x64上だけではなく、以下の環境でも同じように表示された。
- Ubuntu 16.04 + Python 2.7.12
- Raspberry Pi3 + raspbian stretch + Python 2.7.13
◎ 少し解説。 :
pi3d を使うときは、import pi3d を最初のあたりに書いて、「このスクリプトはpi3dを使うよ」とPythonに教えてやる。
上記スクリプトの最初のほうに、from __future__ import なんたら、みたいな行が列挙されてるけど。これは、Python 2.7を使いつつも Python 3.x っぽく動かすための指定らしい。コレを入れとけば Python 2.7 と Python 3.x の両方で動くスクリプトが書けるのだろう。たぶん。Pythonってよく知らないから自信ないけど。
display = pi3d.Display.create(w=640, h=480, frames_per_second=60) で、ウインドウを生成。w,h が、ウインドウ横幅と縦幅の指定。frames_per_second で最大フレームレートを指定。この場合、640x480ドット、60FPSのウインドウを作れ、と指定してる。
フレームレートを指定しないと、CPUが全力でループを回す状態になって、その分、他の処理がおろそかになるのだとか。バックグラウンドで音楽を鳴らしつつ、みたいなことをしたいときはフレームレートを指定したほうがいいよ、とドキュメントには書いてあった。
ball = pi3d.Sphere(z=5.0) で、球を生成。pi3d.Sphere(x=0.0, y=0.0, z=0.0) といった感じの指定で、位置を設定できるらしい。
if keys.read() == 27: は、ESCキーが押されたかチェックしてる。…いきなり直接数値を書いて比較してるあたりがなんだか引っ掛かるなあ。
そのままいきなりスクリプトを終了させると、キー入力関係の不具合が発生する時があるらしいので、keys.close() を呼んでから終了したほうがいいかも、みたいなことが公式ドキュメントに書いてあった。pi3d_demos のサンプルスクリプト群も大体そんな感じの記述になってるっぽい。
display.destroy() でウインドウを破棄、してるのかな。たぶん。
上記スクリプトの最初のほうに、from __future__ import なんたら、みたいな行が列挙されてるけど。これは、Python 2.7を使いつつも Python 3.x っぽく動かすための指定らしい。コレを入れとけば Python 2.7 と Python 3.x の両方で動くスクリプトが書けるのだろう。たぶん。Pythonってよく知らないから自信ないけど。
display = pi3d.Display.create(w=640, h=480, frames_per_second=60) で、ウインドウを生成。w,h が、ウインドウ横幅と縦幅の指定。frames_per_second で最大フレームレートを指定。この場合、640x480ドット、60FPSのウインドウを作れ、と指定してる。
フレームレートを指定しないと、CPUが全力でループを回す状態になって、その分、他の処理がおろそかになるのだとか。バックグラウンドで音楽を鳴らしつつ、みたいなことをしたいときはフレームレートを指定したほうがいいよ、とドキュメントには書いてあった。
ball = pi3d.Sphere(z=5.0) で、球を生成。pi3d.Sphere(x=0.0, y=0.0, z=0.0) といった感じの指定で、位置を設定できるらしい。
if keys.read() == 27: は、ESCキーが押されたかチェックしてる。…いきなり直接数値を書いて比較してるあたりがなんだか引っ掛かるなあ。
そのままいきなりスクリプトを終了させると、キー入力関係の不具合が発生する時があるらしいので、keys.close() を呼んでから終了したほうがいいかも、みたいなことが公式ドキュメントに書いてあった。pi3d_demos のサンプルスクリプト群も大体そんな感じの記述になってるっぽい。
display.destroy() でウインドウを破棄、してるのかな。たぶん。
◎ 球を動かしてみる。 :
静止画ではつまらないので、球を動かしてみたい。sinカーブで位置を変えてみる。
これも、Windows10 x64、Ubuntu 16.04、Raspberry Pi3上で同じように動いた。
ソースは以下。
_helloworld2.py
python helloworld2.py で実行できる。
これも、Windows10 x64、Ubuntu 16.04、Raspberry Pi3上で同じように動いた。
ソースは以下。
_helloworld2.py
u""" pi3d Hello World. 球を生成して描画するサンプル。位置を動かしてみる。 ESCキーで終了する。 Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import math import pi3d # ウインドウ生成 display = pi3d.Display.create(w=640, h=480, frames_per_second=60) x, y, z = 0.0, 0.0, 15.0 x_ang, y_ang, z_ang = 0.0, 0.0, 0.0 # 球を生成 ball = pi3d.Sphere(x=x, y=y, z=z) # キーボード取得用クラスを生成 keys = pi3d.Keyboard() # メインループ while display.loop_running(): # sinカーブで位置を動かす x_ang += 3.0 y_ang += 4.5 z_ang += 0.8 x = 5.0 * math.sin(math.radians(x_ang)) y = 3.0 * math.sin(math.radians(y_ang)) z = 7.0 * math.sin(math.radians(z_ang)) + 15.0 # 球の位置を設定 ball.position(x, y, z) # 球を描画 ball.draw() if keys.read() == 27: # ESCキーが押されたらループを抜けて終了 keys.close() display.destroy() break
python helloworld2.py で実行できる。
[ ツッコむ ]
以上です。