obj.setoption

lua.txtの記述

obj.setoption(name,value)
現在のオブジェクトの各種オプションを設定します。
※スクリプトの呼び出し毎に指定する必要があります。
name オプション名
value オプション値
◇裏面を表示しない
obj.setoption("culling",value)
value 0=表示 / 1=非表示
◇カメラの方向を向く
obj.setoption("billboard",value)
value 0=向かない / 1=横方向のみ / 2=縦方向のみ / 3=向く
◇シャドーの対象
obj.setoption("shadow",value)
value 0=非対象 / 1=対象
◇アンチエイリアス
obj.setoption("antialias",value)
value 0=しない / 1=する
◇合成モード
obj.setoption("blend",value)
value 0=通常 / 1=加算 / 2=減算 / 3=乗算 / 4=スクリーン / 5=オーバーレイ / 6=比較(明) / 7=比較(暗) / 8=輝度 / 9=色差
◇描画先を仮想バッファに変更する
obj.setoption("drawtarget","tempbuffer"[,w,h])
w,h 仮想バッファのサイズ(省略時は初期化しません)
◇描画先をフレームバッファに変更する
obj.setoption("drawtarget","framebuffer")
◇スクリプト内でフレームバッファに描画されたかのステータスを変更する
obj.setoption("draw_state",flag,[size])
flag true=描画済み / false=未描画
◇オブジェクトのフォーカス枠モード
obj.setoption("focus_mode",value)
value "fixed_size"=大きさ固定の枠にする
◇カメラのパラメータを設定する
obj.setoption("camera_param",cam)
cam カメラのパラメータ(テーブル)


解説

オブジェクトの各種オプションを設定します。

なお、一度オプションを設定すると、スクリプトの終わりまで効果が適用されるので注意が必要です。

【合成モードを変更したケース】

obj.setoption("blend",5)      --オーバーレイで合成
obj.load("figure","四角形")
obj.draw(-50)

obj.setoption("blend",0)      --ここで合成モードを「通常」に戻さないと「オーバーレイ」で合成されてしまう。
obj.load("figure","円")
obj.draw(50)


【裏面の表示を変更したケース】
裏面を非表示にすることで、複数描画する場合に軽くなる場合があります。
ただし、カメラがオブジェクトの裏側に回ると表示されなくなるので、閉じた立体図形に使うといいでしょう。

obj.ry = obj.time*30
obj.setoption("culling",1) -- 裏面を非表示にする


【カメラに対して向く方向を変更したケース】
エディットモード時でも反映されるようです。

obj.setoption("billboard",0) -- 向かない
obj.draw(-150)

obj.setoption("billboard",1) -- 横方向のみ
obj.draw(-50)

obj.setoption("billboard",2) -- 縦方向のみ
obj.draw(50)

obj.setoption("billboard",3) -- 向く
obj.draw(150)


【シャドーの反映を変更したケース】

obj.setoption("shadow",0) -- シャドーをかけない
obj.draw(-50)

obj.setoption("shadow",1) -- シャドーをかける
obj.draw(50)


【アンチエイリアスを変更したケース】
エッジのアンチエイリアスを切り、
obj.drawpolyをしたときにできる境界のゴミを和らげる等の効果があります。
平面での処理ならば、仮想バッファを使うとアンチエイリアスを切らずに済みます。


obj.setoption("antialias",0) -- アンチエイリアスを切る
obj.drawpoly( -100,-100,0, 60,-100,0, -60,100,0, -100,100,0 )
obj.drawpoly( 60,-100,0, 100,-100,0, 100,100,0, -60,100,0 )


最初の一行目をコメントアウトにすることで、効果がわかると思います。

【描画先を変更したケース】
仮想バッファを使用するときに使います。


obj.setoption("drawtarget","tempbuffer",100,100) -- 描画先を仮想バッファに変更
obj.load("figure","円",0xffffff,100)
obj.draw(-50,-50)
obj.draw(50,50)
obj.load("tempbuffer")
obj.setoption("drawtarget","framebuffer") -- 描画先をフレームバッファに変更
obj.draw(-50)
obj.draw(50)


【描画ステータスを変更したケース】
obj.effect()を引数なしで呼ぶように、エフェクトが適用されたり、
obj.draw()を行わなければ相対位置(0,0)の位置へ移動します。


obj.draw(-50)
obj.setoption("draw_state",false) -- 描画ステータスを変更
obj.effect("ぼかし")
obj.draw(50)



【フォーカス枠を変更したケース】
オブジェクトフォーカス時の枠を一定のもの(現バージョンでは円)にします。
仮バッファを使わず複数描画を行うカスタムオブジェクト(レンズフレアなど)や、
3Dエフェクトに使うと自然に見えると思います。


size = 100
obj.setoption("focus_mode","fixed_size") -- フォーカス枠のサイズを固定
obj.load("figure","四角形",0xffffff,size)
size = size / 2
-- 立体図形の描画
obj.drawpoly(0,-size,0, 0,-size,0, size/2,0,-size/2, -size/2,0,-size/2 )
obj.drawpoly(0,-size,0, 0,-size,0, -size/2,0,size/2, size/2,0,size/2 )
obj.drawpoly(0,-size,0, 0,-size,0, -size/2,0,-size/2, -size/2,0,size/2 )
obj.drawpoly(0,-size,0, 0,-size,0, size/2,0,size/2, size/2,0,-size/2 )
obj.drawpoly(-size/2,0,-size/2, size/2,0,-size/2, size/2,0,size/2, -size/2,0,size/2)


サンプルの1行目、size(大きさ)の値を変更しても、フォーカス枠の大きさが変わらないのが確認できます。

【カメラのパラメータを変更したケース】
カメラ制御用のスクリプトです。
カメラ効果やスクリプト(カメラ制御)で使用するのが一般的ですが、
図形などで使用することも可能です。

カメラデータを取得したテーブルには、以下のデータがセットされています。
変数名 説明
.x カメラの座標X
.y カメラの座標Y
.z カメラの座標Z
.tx カメラの目標座標X
.ty カメラの目標座標Y
.tz カメラの目標座標Z
.rz カメラの傾き
.ux カメラの上方向単位ベクトルX
.uy カメラの上方向単位ベクトルY
.uz カメラの上方向単位ベクトルZ
.d カメラからスクリーンまでの距離(焦点距離)


cam = obj.getoption("camera_param") -- カメラデータの取得

cam.x = 0 -- カメラデータの設定
cam.y = 0
cam.z = -1024

obj.setoption("camera_param",cam) -- カメラデータのセット






  • 最終更新:2012-06-01 21:06:34

このWIKIを編集するにはパスワード入力が必要です

認証パスワード