obj.drawpoly

lua.txtの記述

obj.drawpoly(x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3[,u0,v0,u1,v1,u2,v2,u3,v3,alpha])
現在のオブジェクトの任意部分を任意の四角形で描画します。メディアオブジェクトのみ使用出来ます。
※内角が全て180度以下の平面以外は正しく描画されません。
※頂点0から3が時計回りになる面が表面になります。
※obj.drawpoly()を使用した場合スクリプト以降のフィルタ効果は実行されません。
x0,y0,z0 四角形の頂点0の座標
x1,y1,z1 四角形の頂点1の座標
x2,y2,z2 四角形の頂点2の座標
x3,y3,z3 四角形の頂点3の座標
u0,v0 頂点0に対応するオブジェクトの画像の座標
u1,v1 頂点1に対応するオブジェクトの画像の座標
u2,v2 頂点2に対応するオブジェクトの画像の座標
u3,v3 頂点3に対応するオブジェクトの画像の座標
例:obj.drawpoly(-50,-50,0, 50,-50,0, 50,50,0, -50,50,0, 0,0, obj.w,0, obj.w,obj.h, 0,obj.h)



解説

オブジェクトの任意の部分を切り取り描画します。
引数が多いので慣れるまでが大変ですが、非常に応用性のある関数です。
球体や曲面表現をする場合には、ほぼ必須の機能。

引数は、前半4点の座標(x,y,z)と、後半4点の座標(u,v)の二つに分けることができます。
・前半は、AviUtlの座標空間上で、どの位置に描画するかを指定します。
・後半は、元画像のどの部分を切り取るかを指定します。
つまり、後半の座標で指定した元画像の一部分を、前半の座標の位置に描画する処理をします。
drawpoly01.png
※画像(フリー素材)は「写真素材 足成」より


前半の引数

前半の引数は、AviUtlの座標空間上で、どの位置に描画するかを指定します。
(x0,y0,z0)→左上の座標
(x1,y1,z1)→右上の座標
(x2,y2,z2)→右下の座標
(x3,y3,z3)→左下の座標

座標の順番は左上から始まり、時計回りとなっています。


後半の引数

後半は、元画像のどの部分を切り取るかを指定します。
元画像は、当然平面(2D)なので(X座標,Y座標)=(u,v)の2つずつのセットになっています。
(u0,v0)→左上の座標
(u1,v1)→右上の座標
(u2,v2)→右下の座標
(u3,v3)→左下の座標

なお、元画像の左上が原点(0,0)となっていることに注意が必要です。
なので元画像の左上は(0,0)、右上は(obj.w,0)、右下は(obj.w,obj.h)、左下は(0,obj.h)となります。

【元画像全てを切り取るケース】
u0=0
u1=obj.w
v0=0
v2=obj.h
obj.drawpoly(x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3, u0,v0,u1,v0,u1,v2,u0,v2)

※スクリプトを分かりやすく記述したい場合は、できるだけobj.drawpoly()の中に式を記述しないようにしたほうがよいかもしれません。
なお、u0~v3の後半の引数を省略すると、元画像全てを切り取ります。


透明度

最後(alpha)の引数で不透明度を指定することも出来ます。(0.0=透明/1.0=不透明)


ポリゴンの表と裏

drawpolyの豆知識



簡単な使用例

【短冊状に描画する例】

n=10
w=obj.w/2
h=obj.h/2
x0=w
x1=-w
u0=0
u1=w*2
for i=0,n-1 do
  y0=-h+obj.h/n*i
  y2=-h+obj.h/n*(i+1)
  v0=y0+h
  v1=y2+h
  alpha=1/(i+1)  --分かりやすいように透明度を変化
  obj.drawpoly(x0,y0,0,x1,y0,0,x1,y2,0,x0,y2,0, u0,v0,u1,v0,u1,v1,u0,v1 ,alpha)
end


  • 最終更新:2011-12-15 22:52:16

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

認証パスワード