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の座標空間上で、どの位置に描画するかを指定します。
・後半は、元画像のどの部分を切り取るかを指定します。
つまり、後半の座標で指定した元画像の一部分を、前半の座標の位置に描画する処理をします。
※画像(フリー素材)は「写真素材 足成」より
前半の引数
前半の引数は、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