I started learning how to use away3D today and I made like a simple
example of two views rendering the same scene, with a cone, sphere and
cube rotating around. The one scene using a normal Camera3D and the
other using a TargetCamera3D... Everything was cool until I put
PhongColorMaterials onto the objects... Funky things started
happening, for some reason all the objects took on the same material
at once, only one camera worked at a time... The depth of the objects
went outta whack... Is there something I didn't do right or something?
Heres the code:
package {
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.lights.DirectionalLight3D;
import away3d.materials.PhongColorMaterial;
import away3d.containers.ObjectContainer3D;
import away3d.primitives.Sphere;
import away3d.primitives.Cube;
import away3d.primitives.Cone;
import away3d.cameras.Camera3D;
import away3d.cameras.TargetCamera3D;
import away3d.core.math.Number3D;
import away3d.core.clip.RectangleClipping;
import away3d.core.base.Object3D;
import away3d.events.MouseEvent3D;
import flash.display.Sprite;
import flash.events.Event;
public class class3 extends Sprite {
var myScene:Scene3D;
var myObjects:ObjectContainer3D;
var myBox:Cube;
var mySphere:Sphere;
var myCone:Cone;
var myView1:View3D;
var myView2:View3D;
var myCamera1:Camera3D;
var myCamera2:TargetCamera3D;
var myLight1:DirectionalLight3D;
var mat1:PhongColorMaterial = new PhongColorMaterial(0xFFFF00);
var mat2:PhongColorMaterial = new PhongColorMaterial(0xFF0000);
var mat3:PhongColorMaterial = new PhongColorMaterial(0x0000FF);
public function class3() {
myScene = new Scene3D();
//myScene.autoUpdate = false;
myObjects = new ObjectContainer3D();
myScene.addChild(myObjects);
makeObjects();
makeViews();
makeLights();
addEventListener(Event.ENTER_FRAME, renderScene);
}
function makeObjects():void {
myBox = new Cube({material:mat1, width:10, height:40, depth:
10,x:-50});
mySphere = new Sphere({material:mat2, radius:20});
myCone = new Cone({material:mat3, radius:20, height:20,x:50});
myObjects.addChild(myBox);
myObjects.addChild(mySphere);
myObjects.addChild(myCone);
myBox.addEventListener(MouseEvent3D.MOUSE_DOWN, focusOnObject);
mySphere.addEventListener(MouseEvent3D.MOUSE_DOWN,
focusOnObject);
myCone.addEventListener(MouseEvent3D.MOUSE_DOWN, focusOnObject);
}
function makeViews():void {
myCamera1 = new Camera3D({zoom:10,focus:100});
myCamera1.z = -150;
myCamera1.y = 250;
myCamera1.lookAt(new Number3D(0,0,0));
myView1 = new
View3D({x:200,y:200,scene:myScene,camera:myCamera1});
myView1.clipping = new RectangleClipping({minX:-200, minY:-200,
maxX:
200, maxY:200})
addChild(myView1);
myCamera2 = new TargetCamera3D({zoom:10,focus:100});
myCamera2.z = -250;
myCamera2.target = mySphere;
myView2 = new
View3D({x:600,y:200,scene:myScene,camera:myCamera2});
myView2.clipping = new RectangleClipping({minX:-200, minY:-200,
maxX:
200, maxY:200})
addChild(myView2);
}
function makeLights():void {
myLight1 = new DirectionalLight3D();
myScene.addChild(myLight1);
myLight1.x = 100;
myLight1.y = 80;
myLight1.z = -100;
}
function renderScene(e:Event):void {
myObjects.rotationY += 0.5;
//myScene.update();
myView1.render();
myView2.render();
}
function focusOnObject(e:MouseEvent3D):void {
var obj:Object3D = e.currentTarget as Object3D;
myCamera1.lookAt(new Number3D(obj.x,obj.y,obj.z));
myCamera2.target = obj;
}
}
}