写真の簡単なviewer



簡単な写真のviewerです。


こんな感じ
ソース


解説


Planeに写真を貼る

// Planeを作成
var mat:BitmapMaterial=new BitmapFileMaterial("./imgs/img"+i+".jpg");
mat.doubleSided =true;
var p:Plane=new Plane(mat, 200, 200);


まず、BitmapMaterialで画像を指定し、それをPlaneの生成時に引数で渡してあげればOK
doubleSidedをtrueにするとPlaneの両面に画像が表示されます。


あとはsin,cosを使って座標を計算して、ぐるぐる回しています。
そしてPlaneがクリックされたらTweenerを使って中央へ移動。
中央にあるPlaneが動いては困るのでそれだけ停止させています。


こんな感じで

private function onFrame(e:Event):void
        {
            t--;

            // 360°を15分割して、Planeを並べていく。
            for(var i:int=0; i < array.length; i++)
            {
                // 角度を計算
                var theta:Number=360 * i / P_NUM + t;
                // 半径を計算
                var radisu:Number=1000;

                // 配列からPlaneを取ってきてるよ!
                var p:Plane = array[i] as Plane;
                
                //選択中のプレーンならば
                //本来いるべき位置を記録しておく
                if(p == s_plane){
                    // ローテーションの計算
                    p.extra.rotationY = -(theta-stage.frameRate + 90);
               
                    // pの座標を計算する
                    p.extra.x=radisu * Math.cos((theta-stage.frameRate) * Math.PI / 180);
                    p.extra.z=radisu * Math.sin((theta-stage.frameRate) * Math.PI / 180);
                }else{
                    // ローテーションの計算
                    p.rotationY = -(theta + 90);
               
                    // pの座標を計算する
                    p.x=radisu * Math.cos(theta * Math.PI / 180);
                    p.z=radisu * Math.sin(theta * Math.PI / 180);
                }
            }
        }


中央から戻す時にその座標が分かるようにextraプロパティ内に座標とrotationは計算し記録しておきます。


ただこのプログラムだと中央のPlaneとの入れ替え時の動作が少し滑らかではありません。


あとで、それを直します。