PV3D。カメラの話。
■多謝
http://clockmaker.jp/blog/2009/05/papervision3d_tutorial_5/
■まずはカメラを動かすことを体験
デモはカメラの移動軌跡をトゥイーンライブラリのTweenerを使って、ベジェ曲線として動かすものです。
http://labs.zeh.com.br/blog/?p=104
また、カメラのプロパティ(xyzや、rotationXYZなど)のイメージをつかむには次の記事が参考になります。
http://www.y-tti.com/blog/2008/04/papervision3d_2.php
本記事ではカメラの動かし方を3分類に分け、それらを順を追って説明していきます。
* 自動回転型
* マウスの位置連動型
* マウスのドラッグ&ドロップ型
■パーティクル
よりリアリティーを出すために地球の周りを浮遊する隕石も作ってみました。これはPapervision3Dのパーティクル機能を作って再現しています。次のスクリプトは2000の幅を持った立方体の中に幅4のパーティクルを500個生成するというものです。
■カメラの種類
Papervision3Dのカメラには大きく2種類の制御方法があります。
* 常に一点を向き続けるターゲットカメラ
* カメラの視点を自由に設定できるフリーカメラ
今回は前者のターゲットカメラで試していきます。なおBasicViewの初期設定はターゲットカメラです。
■課題1 : 地球の周りをカメラを回転させる
カメラの座標の設定方法はcameraのx,y,zプロパティーに値を入れるだけです。カメラはターゲットカメラですので、常に1点を向き続けています。BasicViewでは特に設定しない限り原点(0,0,0)を向いてます。
動きの演出については、フレーム毎に衛星の配置角度を0.5度ずつ加算し、それをカメラの座標に変換しています。カメラの座標は三角関数(sinとcos)を使って、角度から求めています。1000という値は円の半径です。
エンターフレームのハンドラーの部分に次のスクリプトを記載。
■課題2 : マウスの座標に応じて回転させる
角度の算出方法をステージの幅の何%の位置にマウスがあるかを計算で求め、それを角度に反映。
■課題3 : マウスのドラッグに応じてカメラを制御する
マウスのドラッグ&ドロップでカメラの位置を制御できるようにしてみます。
ドラッグ&ドロップはマウスを押したとき・移動したとき・離したときの3パターンのイベントに分解できます。コアのロジックは、押したときのマウス座標から移動したときのそれとの差分を求めることです。求めた差分を角度に変換し(適当な0.25という値を乗算しています)、それをイージングの公式を用いて滑らかにし、それをカメラの座標に三角関数で設定しています。
■課題4 : ドラッグ&ドロップを上下左右対応に