flash on 2010-2-2
Papervision3D 2.0 alpha(08.08.08)を利用
メインクラス(ReflectionViewを継承することで反射面が表現できます)
/**
* Copyright wf_mizzkey ( http://wonderfl.net/user/wf_mizzkey )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ogpL
*/
package
{
import flash.display.*;
import flash.events.*;
import flash.utils.*;
// Papervision3D 2.0 alpha(08.08.08)を利用
import org.papervision3d.core.effects.view.ReflectionView;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*
[SWF(width = "720", height = "480", frameRate = "60", backgroundColor = "#001122")]
/**
* メインクラス(ReflectionViewを継承することで反射面が表現できます)
*/
public class B extends ReflectionView
{
/**
* Constructor
*/
public function B()
{
stage.quality = StageQuality.LOW;
// オブジェクトを作成します
var sphere:DisplayObject3D = createSphere();
var earth:Plane = new Plane(new WireframeMaterial(0xFFFFFF, .5), 1000, 1000, 10, 10);
// オブジェクトの角度を調整します
sphere.rotationX = 90;
earth.rotationX = 90;
// 3D表示リストに追加します
scene.addChild(sphere);
scene.addChild(earth);
// 反射面の高さを設定します
surfaceHeight = 0;
// 毎フレームの演出を設定します(匿名関数で楽して書いてます)
addEventListener(Event.ENTER_FRAME, function(event:Event):void
{
// sphereの揺らぎを設定しています
sphere.y = Math.sin(getTimer() / 200) * -25 + 240;
// カメラが演習を回っているように設定しています
camera.x = 500 * Math.sin(getTimer() / 1000);
camera.y = 600;
camera.z = 500 * Math.cos(getTimer() / 1000);
// カメラが近づいたり離れたりする演出
camera.zoom = 10 * Math.sin(getTimer() / 2000) + 40;
// ReflectionViewのレンダリング
singleRender();
});
}
/**
* sphere
*/
private function createSphere():DisplayObject3D
{
// Sphereのコンテナーを作成
var sphere :DisplayObject3D = new Sphere();
var mat:WireframeMaterial = new WireframeMaterial(0xff00dd);
mat.doubleSided = true;
var sphere1 :Sphere = new Sphere(mat, 200, 16, 16);
sphere1.addChild(sphere);
// Sphereのインスタンスを返却
return sphere;
}
}
}