Сразу к делу
Пример: http://malesya.ru/google/
Исходник в FlashDevelop: http://www.malesya.ru/google/Away3dGoogle.rar
Исходник Flash CS4 : http://www.malesya.ru/google/flashaway3d.rar
Код:
Код AS3:
package
{
import away3d.cameras.Camera3D;
import away3d.containers.ObjectContainer3D;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.core.light.PointLight;
import away3d.core.math.Number3D;
import away3d.materials.ColorMaterial;
import away3d.primitives.Cube;
import away3d.primitives.Plane;
import flash.geom.Point;
import flash.display.*;
import flash.events.Event;
/**
* ...
* @author Bdrs
*/
public class Main extends Sprite
{
private var view:View3D;
private var scene:Scene3D;
private var cam:Camera3D;
private var container:ObjectContainer3D = new ObjectContainer3D;
private var container2:ObjectContainer3D = new ObjectContainer3D;
private var plane:Plane;
private var spriteContainer:Sprite = new Sprite;
private var spriteContainer2:Sprite = new Sprite;
private var sprite:Sprite = new Sprite;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
////////////////////// Flash constructor
sprite.graphics.beginFill(0xFF0000, .6);
sprite.graphics.drawRect( -50, -50, 100, 100);
spriteContainer.x = stage.stageWidth / 2;
spriteContainer.y = stage.stageHeight / 2;
spriteContainer2.z = 1000;
addChild(spriteContainer)
spriteContainer.addChild(spriteContainer2);
spriteContainer2.addChild(sprite);
///////////////////// AWAY 3D Constructor
view = new View3D;
view.x=stage.stageWidth/2;
view.y=stage.stageHeight/2;
scene=new Scene3D;
cam = new Camera3D;
cam.z=-1000;
cam.lookAt(new Number3D(0,0,0));
view.scene = scene;
view.camera = cam;
addChild(view);
var mat:ColorMaterial = new ColorMaterial(0x0000FF);
mat.alpha = .6;
plane = new Plane;
plane.material = mat;
plane.rotationX = 90;
container2.z = 1000;
scene.addChild(container);
container.addChild(container2);
container2.addChild(plane);
addEventListener(Event.ENTER_FRAME, onEF);
stage.addEventListener(Event.RESIZE, onResize);
Resize();
}
public function onEF(e:Event):void {
spriteContainer.rotationY = (mouseX / stage.stageWidth - .5) * 90;
container.rotationY = (mouseX / stage.stageWidth - .5) * 90;
spriteContainer.rotationX = -( mouseY/stage.stageHeight-.5) * 90;
container.rotationX = -(mouseY / stage.stageHeight - .5) * 90;
view.render();
}
public function onResize(e:Event):void {
Resize();
}
private function Resize():void{
view.x=stage.stageWidth/2;
view.y=stage.stageHeight/2;
spriteContainer.x = stage.stageWidth / 2;
spriteContainer.y = stage.stageHeight / 2;
root.transform.perspectiveProjection.projectionCenter=new
Point(stage.stageWidth / 2,stage.stageHeight / 2);
}
}
Как мне кажется проблема в разных фокусах и углах обзора. По умолчанию они такие : В флэше :
root.transform.perspectiveProjection.fieldOfView=55
root.transform.perspectiveProjection.focalLength = 768
в Away3d:
camera.fov =10;
camera focus = 100;
Вопрос конечно специфичный, я уже четвертый день над ним залипаю, но вдруг кто сталкивался.
Ответьте мне что-ли кто-нибудь. Любую глупую идею, а я ее проверю)
|