凸面鏡の万華鏡

円筒の筒を使った万華鏡があるよね。で、覗いてみると対象が引き延ばされていまいち面白くない。円筒の中にものを入れたのではそもものに対して凹面鏡じゃない?それより凸面鏡にした方がきれいになりそうだと前から思っていたんだけど、実験する技術力がなかった。で、Blenderを覚えてみるとこれPythonで制御できるので凸面鏡万華鏡を作るのも簡単。早速試してみた。


まあ、実際の万華鏡と比べると「視野内に照明が入っている」というとてもずるい状態なんだけど。正直ここまできれいになるとは思っていなかった。

中にものを入れてズームイン。

照明を増やしてみた。きれい。


コードはコードと呼べるほどのものじゃなくて、数値指定でCurveを作っただけ。そのCurveをBlender 3D: Noob to Pro/Intro to Bezier Curvesの説明通りにextrudeして筒にしてある。

from Blender import * 
cu = Curve.New() 

bt= BezTriple.New(0, 0, 0, 0, -1, 0, 0, 0, 0)
bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) 
cu.appendNurb(bt) # We must add with a point to start with 
cu_nurb = cu[0]


bt= BezTriple.New(0, 0, 0, 1, 0, 0, 0, 0, 0)
bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) 
cu_nurb.append(bt)

bt= BezTriple.New(0, 0, 0, 0, 1, 0, 0, 0, 0)
bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) 
cu_nurb.append(bt)

bt= BezTriple.New(0, 0, 0, -1, 0, 0, 0, 0, 0)
bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) 
cu_nurb.append(bt)

bt= BezTriple.New(0, 0, 0, 0, -1, 0, 0, 0, 0)
bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) 
cu_nurb.append(bt)

scn = Scene.GetCurrent() 
ob = scn.objects.new(cu)