I've updated Away3d Lite to svn revision r1941 (quad support is
fantastic), but I've found a sorting problem.
If you mix on the same scene a primitive based on quad (cube6) with a
triangle based primitive (cone), sorting is wrong, quad primitive is
always rendered in front of the other primitive.
I've modified the Basic_SceneSetup file to show the problem.
I've also found a crash bug (not present in old revisions), to avoid
crash I've added a render() call after primitive creation.
package
{
import away3dlite.cameras.*;
import away3dlite.containers.*;
import away3dlite.materials.*;
import away3dlite.primitives.*;
import net.hires.debug.Stats;
import flash.display.*;
import flash.events.*;
[SWF(backgroundColor="#000000", frameRate="60", quality="MEDIUM",
width="800", height="600")]
public class Basic_SceneSetup extends Sprite
{
//signature swf
[Embed(source="assets/signature_lite.swf", symbol="Signature")]
public static var SignatureSwf:Class;
//engine variables
private var scene:Scene3D;
private var camera:Camera3D;
private var view:View3D;
//signature variables
private var Signature:Sprite;
private var SignatureBitmap:Bitmap;
//material objects
private var material:ColorMaterial;
//scene objects
private var plane:Plane;
private var cone:Cone;
private var cube:Cube6;
/**
* Constructor
*/
public function Basic_SceneSetup()
{
init();
}
/**
* Global initialise function
*/
private function init():void
{
initEngine();
initMaterials();
initObjects();
initListeners();
}
/**
* Initialise the engine
*/
private function initEngine():void
{
scene = new Scene3D();
//camera = new Camera3D({z:-1000});
camera = new Camera3D();
camera.z = -2000;
//view = new View3D({scene:scene, camera:camera});
view = new View3D();
view.scene = scene;
view.camera = camera;
view.camera.x = 300;
//view.addSourceURL("srcview/index.html");
addChild(view);
//add signature
Signature = Sprite(new SignatureSwf());
SignatureBitmap = new Bitmap(new BitmapData
(Signature.width, Signature.height, true, 0));
stage.quality = StageQuality.HIGH;
SignatureBitmap.bitmapData.draw(Signature);
stage.quality = StageQuality.MEDIUM;
addChild(SignatureBitmap);
addChild(new Stats());
}
/**
* Initialise the materials
*/
private function initMaterials():void
{
material = new ColorMaterial(0xCC0000);
}
/**
* Initialise the scene objects
*/
private function initObjects():void
{
//plane = new Plane({material:material, width:500,
height:500,
yUp:false, bothsides:true});
plane = new Plane();
plane.material = material;
plane.width = 500;
plane.height = 500;
plane.yUp = false;
plane.bothsides = true;
plane.z = 600;
// scene.addChild(plane);
cone = new Cone();
cone.height = 200;
cone.radius = 100;
cone.z = -200;
scene.addChild(cone);
// view.render();
cube = new Cube6();
cube.width = 200;
cube.height = 200;
cube.depth = 200;
cube.z = 200;
scene.addChild(cube);
view.render();//added to avoid player crash
}
/**
* Initialise the listeners
*/
private function initListeners():void
{
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(Event.RESIZE, onResize);
onResize();
}
/**
* Navigation and render loop
*/
private function onEnterFrame( e:Event ):void
{
// plane.rotationY += 2;
view.render();
}
/**
* stage listener for resize events
*/
private function onResize(event:Event = null):void
{
view.x = stage.stageWidth / 2;
view.y = stage.stageHeight / 2;
SignatureBitmap.y = stage.stageHeight - Signature.height;
}
}
}