Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Как добиться чтобы два объекта в Away3d и в Flash IDE перемещались одинаково. (http://www.flasher.ru/forum/showthread.php?t=143589)

formid 20.08.2010 12:32

Сразу к делу

Пример: 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;

Вопрос конечно специфичный, я уже четвертый день над ним залипаю, но вдруг кто сталкивался.

Ответьте мне что-ли кто-нибудь. Любую глупую идею, а я ее проверю)


Часовой пояс GMT +4, время: 16:19.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.