// 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(); } } } forked from: flash on 2009-5-21