VTKPython
日経ソフトフェアで紹介されていた、VTKPythonを使ってみました。
インストールの方法はこちらがとっても詳しいです。
http://www.cubelab.com/ymasuda/python/vtkpython/installation.html
VTKPythonっていうのは、簡単に3Dグラフィックを表示するライブラリのVTKを
Pythonに移植したものです。
3Dグラフィックの簡易な実行環境が欲しかったので、
ちょうど良かったです♪(´▽`)
…Direct3Dで、簡単な実験をするのはちょっと大袈裟なんですよね。
どれぐらい簡単なのかというと、、、
(実行サンプルに入っているソースです)
import vtk import time # 円錐オブジェクトを作る! cone = vtk.vtkConeSource() cone.SetHeight( 3.0 ) # 高さ cone.SetRadius( 1.0 ) # 半径 cone.SetResolution( 10 ) # 面の数 # Polygonをパイプラインに設定? coneMapper = vtk.vtkPolyDataMapper() coneMapper.SetInput(cone.GetOutput()) # レンダリングフィルタに設定? coneActor = vtk.vtkActor() coneActor.SetMapper( coneMapper ) # レンダラに設定 ren1= vtk.vtkRenderer() ren1.AddActor(coneActor) ren1.SetBackground(0.0, 0.0, 1.0) # 消去色 # 窓に登録 renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren1) renWin.SetSize(300, 300) # サイズ for i in range(0,360): time.sleep(0.03) # タイマー renWin.Render() # 描画 ren1.GetActiveCamera().Azimuth(1) # カメラを1°回転
(コメントは、私の勝手な解釈です...(´Д`;
なんとこれだけで、
円錐オブジェクトがグルグルまわるアニメーションができてしまいます!
素晴らしや…。
さらに、
# コールバック関数を定義 def myCallback(object, event): object.GetActiveCamera().Zoom(1.005) ・ ・ ・ ren1.AddObserver("StartEvent", myCallback) # コールバック関数を登録
Observerパターンで、renderの処理を定義していますね。
なるほど。
どうやら他の部分もゴリゴリのオブジェクト指向で設計されていて、面白いみたいです。
で、コールバック関数なのですが、
引数のobjectは、レンダラーオブジェクトです。
1.005倍でどんどんズームしちゃってますw
う〜む、面白い。
VPython
VTKPythonで、3D物理シミュレーションっぽいことをやってみたかったのですが、
それはどうも違うみたいでした。
調べてみたら、それをやるならVTKPythonよりもVPythonの方がいいみたいですね。
http://www.vpython.org/index.html
ということで、インストール。
from visual import * greenball = sphere(pos=vector(0, 0, 0), radius=2, color=color.green)
これだけで、ボールが表示されます。
あああ、こっちの方が簡単だ…、、、(´Д`;
from visual import * # ボールオブジェクト作成 ball = sphere(pos=(0, 10, 1), color=color.red) ball.velocity = vector(0, -1, 0) # 初速度 dt = 0.01 while True: rate(100) # 描画更新割合 ball.pos += ball.velocity*dt # 距離+速さ if ball.y < 0: ball.velocity.y = -ball.velocity.y # 反射 else: ball.velocity.y = ball.velocity.y - 9.8*dt # 重力加速
こうすると、ボールが画面の中央で、ぼーんぼーんと跳ねます。
うーむ、面白い。
さらに、
from visual import * # 外枠 def wirecube(s): c = curve (color=color.white, radius=0.1) pts = [(-s, -s, -s),(-s, -s, s), (-s, s, s), (-s, s, -s), (-s, -s, -s), (s, -s, -s), (s, s, -s), (-s, s, -s), (s, s, -s), (s, s, s), (-s, s, s), (s, s, s), (s, -s, s), (-s, -s, s), (s, -s, s),(s, -s, -s)] for pt in pts: c.append(pos=pt) side = 4.0 # 移動可能範囲(-size〜size) wirecube(side) # 外枠オブジェクト作成 # ボールオブジェクト ball = sphere(color=color.green) ball.radius = 0.4 # 半径 ball.mass = 1.0 # 質量 ball.p = vector(-0.15, -0.23, +0.27) # 移動量 dt = 0.3 while 1: rate(100) ball.pos = ball.pos + (ball.p/ball.mass)*dt # 加速 if not (-side < ball.x < side): ball.p.x = -ball.p.x # X壁反射 if not (-side < ball.y < side): ball.p.y = -ball.p.y # Y壁反射 if not (-side < ball.z < side): ball.p.z = -ball.p.z # Z壁反射
こうすると、ボールが3Dの枠の中でガンガン移動しまくります。
しかも、枠にぶつかると、枠が揺れる!
タブインデント禁止
今更ネタですが…。
http://www.python.jp/Zope/ (2005/04/01)より。
Guido van Rossum 氏は Python プログラマのさらなる飛躍のため、
新たな「型」の導入を決心したようです。
それはホワイトスペースの使い方を構文レベルで強制することです。
次のような案が出ています。
- タブによるインデントは廃止。
- インデントにはスペースを使う。
- return(1) のように冗長なカッコの利用は認めない。必ず return 1 のように書く。
- ( x > y ) のようにカッコの前後に余計なスペースを入れてはいけない。(x > y) と書く。
- 行末にセミコロンを入れるのは禁止。
- 代入や比較演算子の前後には必ずスペースを入れる。
- コロンの前にスペースを入れてはいけない。
- 辞書の場合 {'foo': 'bar'} のようにコロンの後ろに必ずスペースを入れる。
- if x: y のような書き方は廃止。必ず2行に分け、インデントしなければならない。
これらは Python 2.5 でオプションとして、2.6 から正式の構文として導入される予定です。
タブインデント禁止ですか!!!
厳しいなぁ…。
しかし、他の制約はもっと厳しいですね(笑)
過去のソースが実行できなくなっちゃいますよね、、。
Python Challenge
これも今更ネタですが…。
http://www.pythonchallenge.com/pc/index.htm
Pythonのクイズみたいです。
Pythonでスクリプトを書いて、クイズを解く、というアイデアが面白いですね。
株式会社デジタルスケープ
http://www.dsp.co.jp/index_nf.html
デジタルクリエイターの人材派遣会社みたいです。
大学5年間で学んでよかった・学ぶべきだった情報技術
http://d.hatena.ne.jp/ryoko_komachi/20050707/1120754284
これ、全部できれば、引く手あまたですね(´∀`)
とりあえず、この中の2〜3つ極めれば、職に困ることはなくなりそうです。
個人的にピックアップしたいのが、
ですね。
DirectXって、ユーティリティ関数が多くて、数学の知識がなくても、
そこそこの3Dゲームが作れてしまいます。
うちの先生曰く、
「DirectXばかり使っていると馬鹿になる」
ということです。
私もそう思います。
OpenGLだと、そういったものをネットで探したり、自作しなければならないので、
とても勉強になると思います。
あと、PS3がOpenGLを採用したってこともありますね。
…まあ、正直、将来的には、DirectXのXbox360が日本市場を独占すると思っています。
http://blog.livedoor.jp/shi3z/archives/22120017.html
が、当面はPS3で開発することも要求されると思うので、
OpenGLもやっておいた方がいいですね。(たぶん)
キーワード編集
デザインパターン関連のキーワードを編集。
- Iterator
- Adapter
- TemplateMethod
- FactoryMethod
- Singleton
- Prototype
- Builder
- AbstractFactory
- Bridge
- Strategy
- Composite
- Decorator
- Visitor
- ChainOfResponsibility
- Facade
- Mediator
- Observer
- Memento
- State
- Flyweight
- Proxy
- Command
- Interpreter
BuilderとかAbstractFactoryとかBridgeあたりが
まだよく理解できてないですね…。
コンピューターの新着キーワードがデザインパターンで埋まってて、
楽しいなーw
http://d.hatena.ne.jp/keywordlist?cname=elec