forked from: flash on 2009-5-21
forked from flash on 2009-5-21 (diff: 26)
flash papervision3D プロファイラー
ActionScript3 source code
/**
* Copyright oreore ( http://wonderfl.net/user/oreore )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/zntR
*/
// forked from toni's flash on 2009-5-21
package
{
//flash
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
//papervision3D
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.special.CompositeMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.core.effects.view.ReflectionView;
//プロファイラー
import com.flashdynamix.utils.SWFProfiler;
public class Main extends Sprite
{
private var plane:Plane;
private var viewPort:ReflectionView;
public function Main()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
SWFProfiler.init(this);
init();
}
private function init():void
{
/************************************************************************
* 1.ビューポートを生成する(ReflectionViewを使ってみる)
* ReflectionViewの中を見てみるとBasicViewを継承しているので
* 以前BasicViewでつくったものと考え方は同じになる
* 第三引数 scaleToStage:Boolean = trueになっていれば 高さと幅は0でよいことに
* ようやく気づきました;
************************************************************************/
viewPort = new ReflectionView(0, 0, true,false);
addChild(viewPort);
/************************************************************************
* 2.カメラの設定
* ReflectionView を new したときに カメラが生成されているので
* viewPort.camera でアクセスします。
************************************************************************/
viewPort.camera.z = -1000;
viewPort.camera.y = 500;
/************************************************************************
* 3.シーンの作成
* カメラと同様にReflectionView を new したときに シーンも生成され
* ているので今回はnew しない。
************************************************************************/
//今回は特になにもしないが混乱を避けるためにあえて記載しとく
//なしもしないけどシーンはできてるよ~!
//BasicViewクラスの中をみるとscene3Dが作成されてました。
/************************************************************************
* 4.レンダリング
* 鏡面効果を使う場合はenterFrame内でsingleRenderingを
* 使わないといけない。
* この辺はまったく解読不能でした。
* ひとまず鏡面反射はsingleRenderingと覚えることにした。
* どなたかこの理由を簡単に解説いただければ幸いです。
************************************************************************/
//viewPort.startRendering();
/************************************************************************
* 5.3Dオブジェクトの生成
************************************************************************/
//板を作成
var wfm:WireframeMaterial = new WireframeMaterial();
wfm.doubleSided = true;//裏も描画する
plane = new Plane(wfm, 300, 200, 4, 4);
viewPort.scene.addChild(plane);
//床を作成
var floorMate:CompositeMaterial = new CompositeMaterial();
floorMate.addMaterial(new WireframeMaterial(0x696969,50));
floorMate.addMaterial(new ColorMaterial(0xdcdcdc,0.5));
var floor:Plane = new Plane(floorMate, 1000, 1000, 12, 12);
floor.rotationX = 90;
viewPort.scene.addChild(floor);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
plane.y += 1;
plane.rotationX += 1;
plane.rotationZ += 1;
viewPort.singleRender();
}
}
}
