2つのView3DにScene3Dを共有して表示してみました。下画面のオレンジ色の円錐が、上画面のカメラの位置と向きになっています。Away3Dのバージョンは4.0 Betaを使用しました。
package { import flash.display.*; import flash.events.Event; import flash.geom.Vector3D; import flash.utils.getTimer; import away3d.cameras.lenses.PerspectiveLens; import away3d.containers.ObjectContainer3D; import away3d.containers.View3D; import away3d.debug.AwayStats; import away3d.entities.Mesh; import away3d.lights.DirectionalLight; import away3d.materials.ColorMaterial; import away3d.materials.lightpickers.StaticLightPicker; import away3d.materials.methods.FresnelEnvMapMethod; import away3d.primitives.CubeGeometry; import away3d.primitives.CylinderGeometry; import away3d.primitives.SkyBox; import away3d.textures.BitmapCubeTexture; [SWF(width = "480", height = "550", frameRate = "60")] public class MultiCamera extends Sprite { [Embed(source = "MultiCameraPX.png")] private var CubeMapPX:Class; [Embed(source = "MultiCameraPY.png")] private var CubeMapPY:Class; [Embed(source = "MultiCameraPZ.png")] private var CubeMapPZ:Class; [Embed(source = "MultiCameraNX.png")] private var CubeMapNX:Class; [Embed(source = "MultiCameraNY.png")] private var CubeMapNY:Class; [Embed(source = "MultiCameraNZ.png")] private var CubeMapNZ:Class; private var view1:View3D; private var view2:View3D; private var cube:Mesh; private var cameraPosition:Mesh; public function MultiCamera() { if (stage) addedToStageHanlder(); else addEventListener(Event.ADDED_TO_STAGE, addedToStageHanlder); } private function addedToStageHanlder(event:Event = null):void { view1 = new View3D(); view1.antiAlias = 4; view1.camera.lens = new PerspectiveLens(90); view1.height = 270; view2 = new View3D(view1.scene); view2.antiAlias = 4; view2.camera.lens = new PerspectiveLens(90); view2.height = 270; view2.y = 280; view2.camera.lens.far= 10000; view2.camera.z = -1500; view2.camera.y = 1000; view2.camera.lookAt(new Vector3D()); addChild(view1); addChild(view2); var cubeMap:BitmapCubeTexture = new BitmapCubeTexture( new CubeMapPX().bitmapData, new CubeMapNX().bitmapData, new CubeMapPY().bitmapData, new CubeMapNY().bitmapData, new CubeMapPZ().bitmapData, new CubeMapNZ().bitmapData); view1.scene.addChild(new SkyBox(cubeMap)); var light:DirectionalLight = new DirectionalLight(0, -1, 0); light.specular = 0.25; light.ambient = 0.5; view1.scene.addChild(light); var lightPicker:StaticLightPicker = new StaticLightPicker([light]); var cubeMaterial:ColorMaterial = new ColorMaterial(0xFFFFFF); cubeMaterial.lightPicker = lightPicker; cubeMaterial.addMethod(new FresnelEnvMapMethod(cubeMap)); cube = new Mesh(new CubeGeometry(1000, 1000, 50), cubeMaterial); view1.scene.addChild(cube); var cylinderGeometry:CylinderGeometry = new CylinderGeometry(1, 100, 300); cylinderGeometry.yUp = false; cameraPosition = new Mesh(cylinderGeometry, new ColorMaterial(0xFF7F00)); view2.scene.addChild(cameraPosition); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; addChild(new AwayStats(view1)); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(event:Event):void { var duration:int = getTimer(); view1.camera.x = 1000 * Math.sin(-duration / 10000); view1.camera.z = 1000 * Math.cos(-duration / 10000); view1.camera.y = 500 * Math.sin(duration / 3000); view1.camera.lookAt(new Vector3D()); cameraPosition.position = view1.camera.position; cameraPosition.lookAt(new Vector3D()); cube.rotationX += 0.25; cube.rotationY += 0.25; view1.render(); view2.render(); } } }