Tuesday, July 29, 2008
AE / ae3dConvertToScreen
3D 座標 の XYZ 点を、レボルーションのカード上又はグループ上の、2次元座標のデフォルトビューに変換します。最後のパラメータ「focalLength」は、3D オブジェクトからの視点の距離で、数値によって視角が変わってきます。「focalLength」のデフォルトは、3D オブジェクトが標準的な形に見える値の300 ですが、数が小さくなると視角が広くなるので、3D オブジェクトの歪みが大きくなります。
基本構文:
ae3dConvertToScreen(3D座標のX点, 3D座標のY点, 3D座標のZ点, \
カード又はグループ上のX点, カード又はグループ上のY点 [, 焦点距離])
ae3dConvertToScreen(x,y,z,originX,originY[,focalLength])
サンプル:
3D 座標の 0 から、それぞれ50ピクセル(タテ x ヨコ x 高さ、 100x100x100)の立方体をモデルに考えてみます(図1)。立方体の角となるポイントは8箇所ですから、それを表すためのポイントを結ぶ線は 12 必要です。ポリゴンで一筆書きをして行くと、「ABCDAEFD」「BGE」「FHG」「HC」のポイントを結ぶ、4つのポリゴンのブロックで(図3ブルーのライン)、立方体を書き表す事ができます。図2の表は、それぞれのポイントの3D座標とポリゴンにする場合の順序。つまりこの表を「ae3dConvertToScreen」で平面座標に変換して、ポリゴンを描けば平面上に、デフォルトの視点からの立体を描くことができます。
カードのサイズ 400 x 400 の中央(3D オブジェクトのオリジンの座標 200, 200) に、それぞれの3D座標を「ae3dConvertToScreen(x,y,z,200,200)」で、平面座標に変換したのが図4 で、平面上のポイントを図に書き込んでいます。「ae3dConvertToScreen」で得られる座標は、Z軸プラスからマイナスに向かって見ている図で、立方体の面「ABCD」が、もう1方の面「EGHF」より小さく描かれます。
3D座標を変換して、3Dを平面上に描くスクリプト:
-- fld “tPoints” に、図2の3D座標があるとして、
-- グラフィックの polygon 「threeD」は、予め描いておく
-- カードのセンターが 3D オブジェクトのオリジンの座標に設定
repeat for each line theLine in field "tPoints"
if theLine = "" then
put return after output
next repeat
end if
put ae3dconverttoscreen(theLine,the loc of this cd,300) & return after output
end repeat
set the points of graphic "threeD" to char 1 to -2 of output
このページは、Björnke von Gierke の作ったスタック「Mouse rotator for 3d」を参考にしています。
始めにAnimation Engineを開いて、start using stack "animationEngine"
サンプルスタックは、下記をメッセージボックスにコピペしてリターンキーを
go stack \
url "http://homepage.mac.com/kenjikojima/jrevnote/ae3dconverttoscreen.rev"
A
B
C
D
A
E
F
D
B
G
E
F
H
G
H
C
50,50,50
50,-50,50
-50,-50,50
-50,50,50
50,50,50
50,50,-50
-50,50,-50
-50,50,50
50,-50,50
50,-50,-50
50,50,-50
-50,50,-50
-50,-50,-50
50,-50,-50
-50,-50,-50
-50,-50,50