The reflective plane has been around for a while now. I just created test projects to see if it's fixed, here are my results:
*Project info: * **FB4 MXML Project SDK 3.5 Away3D 3.6 Trunk (Fresh download) Player 10.1 Camera3D *Result:* Randomly visible *Project info:* FB4 AS3 Project SDK 3.5 Away3D 3.6 Trunk (Fresh download) Player 10.1 *Result:* Randomly visible and shows up on browser resize So guess still not fixed or there is something we are missing... Source code for MXML project & Pure AS3 project attached below: *MXML Version code - Main.mxml:* <?xml version='1.0' encoding='utf-8'?> <mx:Application xmlns:mx='http://www.adobe.com/2006/mxml' layout='absolute' frameRate='30' applicationComplete='init()'> <mx:Script> <![CDATA[ import away3d.debug.AwayStats; import mx.graphics.SolidColor; import away3d.materials.WireColorMaterial; import away3d.materials.ShadingColorMaterial; import away3d.materials.WireframeMaterial; // Imports import mx.core.UIComponent; import away3d.containers.View3D; import away3d.primitives.*; // Var ini public var view:View3D public var primitive1:GeodesicSphere; public var primitive2:ReflectivePlane; // Setup away3d stats public function setupAwayStats():void { var awaystats:AwayStats = new AwayStats(); away3dstatsContainer.addChild(awaystats); } // when this is added to the stage we start this up (see mc:application tag) public function init():void { // Setup Away3D this.view = new View3D({x:0, y:0}); // Add Away3D to its container UIComponent away3dContainer.addChild(view); // Setup material var mat1:WireColorMaterial = new WireColorMaterial(0xFFCC00); var mat2:WireColorMaterial = new WireColorMaterial(0x660000); // Setup the primitive this.primitive1 = new GeodesicSphere(); this.primitive1.radius = 100; this.primitive1.fractures = 10; this.primitive1.material = mat1; this.primitive1.y = 100; // Add primitive1 to the Away3D view this.view.scene.addChild(this.primitive1); // Setup camera to look at primitive 1 this.view.camera.lookAt(this.primitive1.position); // Setup reflective plane this.primitive2 = new ReflectivePlane(view); this.primitive2.width = 500; this.primitive2.height = 500; this.primitive2.segmentsW = 4; this.primitive2.segmentsH = 4; this.primitive2.rotationX = 15; this.view.scene.addChild(primitive2); // Resize handler this.addEventListener(Event.RESIZE,handleBrowserResize); handleBrowserResize(); // Enter frame handler (make things move) this.addEventListener(Event.ENTER_FRAME, onEnterFrame); } // Enter frame handler for animation private function onEnterFrame(event:Event):void { this.view.render(); this.primitive1.rotationX += 1; this.primitive1.rotationY -= 1; } // Browser resize handler (simply adjust view3d center x:0 y:0 at browser 1/2 width and height to keep things in the middle private function handleBrowserResize(e:Event=null):void { this.view.x = stage.stageWidth/2; this.view.y = stage.stageHeight/2; } ]]> </mx:Script> <mx:UIComponent id='away3dContainer' visible='true'/> <mx:Label x='10' y='10' text='[email protected] developer code snippets' fontWeight='bold'/> <mx:UIComponent id='away3dstatsContainer' visible='true'/> <mx:Button x='10' y='36' label='IF NOTHING HAPPENS CLICK HERE TILL IT DOES' click='init()'/> </mx:Application> *ActionScript 3 project - Main.as* package { import away3d.cameras.HoverCamera3D; import away3d.containers.Scene3D; import away3d.containers.View3D; import away3d.core.render.BasicRenderer; import away3d.debug.AwayStats; import away3d.materials.WireColorMaterial; import away3d.primitives.GeodesicSphere; import away3d.primitives.ReflectivePlane; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { // Var ini private var scene:Scene3D; private var camera:HoverCamera3D; private var view:View3D; private var renderer:BasicRenderer; private var bMove:Boolean = false; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var lastMouseX:Number; private var lastMouseY:Number; private var primitive1:GeodesicSphere; private var primitive2:ReflectivePlane; // ------------------------------------------------------------------------------------------------ public function Main() { if (stage) { setupAway3D(); } else { addEventListener(Event.ADDED_TO_STAGE, setupAway3D); } } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ private function setupAway3D(e:Event=null):void { // Remove stage added listener removeEventListener(Event.ADDED_TO_STAGE, init); // Setup stage stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; // Setup Away3D camera = new HoverCamera3D(); renderer = new BasicRenderer(); scene = new Scene3D(); view = new View3D(); view.scene = scene; view.camera = camera; view.renderer = renderer; view.x = stage.stageWidth / 2; view.y = stage.stageHeight / 2; // Setup camera camera.minTiltAngle = -80; camera.maxTiltAngle = 80; camera.panAngle = 150; camera.tiltAngle = 20; camera.zoom = 5; // Add Away3D to its container UIComponent this.addChild(view); // Setup away3d stats (appears to slow the cpu) var awaystats:AwayStats = new AwayStats(view); this.addChild(awaystats); // Resize handler this.addEventListener(Event.RESIZE,handleBrowserResize); handleBrowserResize(); // Enter frame handler (make things move) stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); // generate generateScene(); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ private function generateScene():void { // Setup material var mat1:WireColorMaterial = new WireColorMaterial(0xFFCC00); var mat2:WireColorMaterial = new WireColorMaterial(0x660000); // Setup the primitive primitive1 = new GeodesicSphere(); primitive1.radius = 100; primitive1.fractures = 10; primitive1.material = mat1; primitive1.y = 100; // Add primitive1 to the Away3D view view.scene.addChild(primitive1); // Setup camera to look at primitive 1 view.camera.lookAt(primitive1.position); // Setup reflective plane primitive2 = new ReflectivePlane(view); primitive2.width = 500; primitive2.height = 500; primitive2.segmentsW = 4; primitive2.segmentsH = 4; primitive2.rotationX = 15; view.scene.addChild(primitive2); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ private function onEnterFrame(e:Event):void { // Camera movement if (bMove) { camera.panAngle = 0.3 * (stage.mouseX - lastMouseX) + lastPanAngle; camera.tiltAngle = 0.3 * (stage.mouseY - lastMouseY) + lastTiltAngle; } // Hover camera camera.hover(); // Render view.render(); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ private function mouseDownHandler(event:MouseEvent):void { lastPanAngle = camera.panAngle; lastTiltAngle = camera.tiltAngle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; bMove = true; stage.addEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ private function mouseUpHandler(event:MouseEvent):void { bMove = false; stage.removeEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ private function onStageMouseLeave(event:Event):void { bMove = false; stage.removeEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ // Browser resize handler (simply adjust view3d center x:0 y:0 at browser 1/2 width and height to keep things in the middle private function handleBrowserResize(e:Event=null):void { view.x = stage.stageWidth/2; view.y = stage.stageHeight/2; } // ------------------------------------------------------------------------------------------------ } } * *
