オブジェクトを設定し,半径と高さを決めます。さらに,移動や回転を設定します。図は,円柱だけ(左),円すいを追加(中),円すいを拡大したもの(右)を表示してます。ちょっとジャギー(線のギザギザ)が目立ちますが,これは,aa-samples", 1,2としたためです。このためにレンダリングが速くなるので,細かい確認作業には楽です。小さいサイズでこのアンチエイリアシングを低くしてレンダリングすると良いでしょう。
最後は,aa-samples", 1,2を削除してからレンダリングするときれいに出ます。
サンプル例 mycylinder.py
------------------------------
#! /usr/bin/env python
from lightflowPM import *
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
plastic = s.newMaterial( "standard",
[ "ka", vector3( 0, 0, 0.5 ),
"kc", vector3( 1, 0, 0 ),
"kd", 0.5,
"km", 0.3,
"ksg", 0.9999 ] )
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 0.5, 0.75 ) ] )
check_ground=s.newPattern("check",["color",vector3( 0.1, 1.0, 0.1 ),"scale",0.025])
ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] ) #チェック緑
s.materialBegin( plastic ) #円柱を回転させてみる。
s.transformBegin( transform().rotationAroundX( -3.141592 / 3 ) )
s.transformBegin( transform().rotationAroundY( 3.141592 / 4 ) )
s.addObject( s.newObject( "cylinder", [ "radius", 1.0 ,"height",4.0] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic2 ) #円すいを加え拡大と移動を行う。
s.transformBegin( transform().translation( vector3(-2.5,0,-1.0)))
s.transformBegin( transform().scaling( vector3(1.5,1.5,1.5)))
s.addObject( s.newObject( "cone", [ "radius",1.5,"height",3.0] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( ground )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.0 ),vector3( -50, 50, -1.0 ),vector3( 50, -50, -1.0 ),vector3( 50, 50, -1.0 )] ) )
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "mycylinder.tga" ] )
s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 0 ),
"aim", vector3( 0, 0, 0 ),
"aa-samples", 1,2 #レンダリングが速くできる。デフォルトは省略されており,2,4になっている。
] )
s.imagerEnd()
s.render( camera, 300, 300 )
MATSpiderでチェック模様の色分けをして、コピーを貼り付けています、
カラーパターンを作成し,出力アウトプットを設けて,ライブラリに登録。
diffuseなどカラーモデルを呼び出し,kcに設定する。
中身は,ちょっと整理していませんが,こんな感じです。
チェック模様です。
#Pattern23
Pattern23_scl = 0.02500
Pattern23_Pattern2 = s.newPattern("check",[
"scale" , Pattern23_scl
])
color_1 = vector3( 0.20000 , 0.40000 , 0.60000)
color_2 = vector3( 0.7000 , 0.40000 , 0.20000)
Pattern23_Pattern22 = s.newPattern("gradient",[
"pattern" , Pattern23_Pattern2 ,
"color" , 1.00000 , color_1 , color_2
])
Pattern23 = Pattern23_Pattern22
Material15 = s.newMaterial("diffuse",[
"kr" , Pattern23
])
以下、サンプル。
#! /usr/bin/env python
from lightflowPM import *
from math import * #数学関数モジュールを使うときに書いておく。ここではpiを利用している。pi=3.14159265358979と円周率です。
s = scene()
s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.3, 0.3, 0.3 ) ] ) ) #環境光を加える。
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 7.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #赤
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 0 ) ] ) #緑
plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0, 0, 1 ) ] ) #青
plastic4 = s.newMaterial( "standard",[ "kc", vector3( 1, 1, 0 ) ] )
plastic5 = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 1 ) ] )
plastic6 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 1 ) ] )
plastic7 = s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] )
ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] )
#Pattern23
Pattern23_scl = 0.02500
Pattern23_Pattern2 = s.newPattern("check",[
"scale" , Pattern23_scl
])
color_1 = vector3( 0.20000 , 0.40000 , 0.60000)
color_2 = vector3( 0.7000 , 0.40000 , 0.20000)
Pattern23_Pattern22 = s.newPattern("gradient",[
"pattern" , Pattern23_Pattern2 ,
"color" , 1.00000 , color_1 , color_2
])
Pattern23 = Pattern23_Pattern22
Material15 = s.newMaterial("diffuse",[
"kr" , Pattern23
])
s.materialBegin( plastic ) #赤の箱は原点にある。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-3.0,0,0))) #緑の箱をx方向に-3移動させた。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic3 )
s.transformBegin( transform().translation( vector3(3.0,0,0)))
s.transformBegin( transform().rotationAroundZ( pi/4 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic4 )
s.transformBegin( transform().translation( vector3(0,0.75,3.0)))
s.transformBegin( transform().rotationAroundZ( pi/6 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic5 )
s.transformBegin( transform().translation( vector3(-5.0,4.0,0)))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic6 )
s.transformBegin( transform().translation( vector3(3.0,3.0,0)))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic7 )
s.transformBegin( transform().translation( vector3(-0.9,-3.5,0)))
s.transformBegin( transform().rotationAroundZ( -pi/10 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( Material15 )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.0 ),vector3( -50, 50, -1.0 ),vector3( 50, -50, -1.0 ),vector3( 50, 50, -1.0 )] ) )
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "check3.tga" ] )
s.imagerBegin( saver )
#カメラは真正面の上の方から見ています。
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 8 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()
s.render( camera, 600, 600 )
↑ですが,単にパターンを作成して,オブジェクトに割り当てても思ったとおりのものはできません。
必ず,diffuseやStandardなどのマテリアルに割り当てる必要があります。それから,マテリアルをオブジェクトに割り当てます。