Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Papervision3D, loockAt(camera) не работает внутри контейнера (http://www.flasher.ru/forum/showthread.php?t=129225)

Mur4ik 27.08.2009 13:01

Papervision3D, loockAt(camera) не работает внутри контейнера
 
Вот пример, демонстрирующий мою проблему ( в 73 строчке).
Как сделать плоскости _sat1 и _sat2 всегда смотрящими на камеру?

Код AS3:

package
{
        import org.papervision3d.core.math.Number3D;
        import org.papervision3d.lights.PointLight3D;
        import org.papervision3d.materials.ColorMaterial;
        import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
        import org.papervision3d.materials.shadematerials.GouraudMaterial;
        import org.papervision3d.materials.WireframeMaterial;
        import org.papervision3d.objects.DisplayObject3D;
        import org.papervision3d.objects.primitives.Plane;
        import org.papervision3d.objects.primitives.Sphere;
        import org.papervision3d.view.BasicView;
 
        import flash.events.Event;
 
        /**
        * Class ContainedLoockAt ...
        * @author Yuriy (Mur4ik) Kulkoff
        * @version 0.1
        * @date 27.08.2009
        */

        public class ContainedLoockAt extends BasicView
        {
                private var _earth:Sphere;
                private var _sat1:Satellite;
                private var _sat2:Satellite;
 
                public function ContainedLoockAt()
                {
                        camera.zoom = 150;
 
                        var lite:PointLight3D = new PointLight3D();
 
                        _earth = new Sphere(new FlatShadeMaterial(lite, 0x0055FF, 0x000051), 90, 16, 12);
                        _earth.rotationZ = -23;
 
                        var matForSat1:ColorMaterial = new ColorMaterial(0xFFFF00);
                                matForSat1.doubleSided = true;
 
                        _sat1 = new Satellite(matForSat1, 20, 20, 110, 6);
                        _sat1.pivot = new DisplayObject3D();
                        _sat1.pivot.rotationZ = -45;
                        _sat1.pivot.addChild(_sat1);
 
                        var matForSat2:ColorMaterial = new ColorMaterial(0xFF0000);
                                matForSat2.doubleSided = true;
 
                        _sat2 = new Satellite(matForSat2, 15, 15, 120, 5);
                        _sat2.pivot = new DisplayObject3D();
                        _sat2.pivot.rotationZ = 45;
                        _sat2.pivot.addChild(_sat2);
 
                        scene.addChild(_earth);
                        scene.addChild(_sat1.pivot);
                        scene.addChild(_sat2.pivot);
 
                        startRendering();
                }
 
                private function orbitCameraTween():void
                {
                        camera.x -= (camera.x - Math.sin(mouseX * 0.01) * 1000) / 8;
                        camera.y -= (camera.y - viewport.containerSprite.mouseY * 5) / 8;
                        camera.z -= (camera.z - Math.cos(mouseX * 0.01) * 1000) / 8;
                }
 
                protected override function onRenderTick(event:Event = null):void
                {
                        _earth.yaw(.3);
 
                        _sat1.satelliteMove();
                        _sat2.satelliteMove();
 
                        // вот эти 2 строчки не дают никакого эффекта
                        _sat1.lookAt(camera);
                        _sat2.lookAt(camera);
 
                        orbitCameraTween();
 
                        renderer.renderScene(scene, camera, viewport);
                }
        }
 
}
 
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.core.proto.MaterialObject3D;
 
internal class Satellite extends Plane
{
        public var pivot:DisplayObject3D;
 
        private var _angle:Number;
 
        public function Satellite(material:MaterialObject3D, w:int = 20, h:int = 20, distance:int = 150, speed:int = 1)
        {
                super(material, w, h);
 
                this.x = distance;
 
                _angle = (0.5 * speed) % 360;
        }
 
        public function satelliteMove():void
        {
                pivot.yaw(_angle);
        }
}

Или вообще как любой объект, находящийся внутри другого объекта сделать всегда повернутым к камере?


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

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