Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Имитация перспективной проекции (http://www.flasher.ru/forum/showthread.php?t=176274)

ohenry 06.03.2012 12:14

Имитация перспективной проекции
 
Задача - не применяя к объекту перспективной проекции, поместить его именно в ту
позицию, куда бы он попал, будь она применена.
"Погуглив", я решил, что должен помочь метод Utils3D.projectVector в связке с toMatrix3D().
Однако, улетаю куда-то в преисподнюю. Как сделать ????
Заранее благодарен.

Вот класс:

Код AS3:

package
{
        import flash.display.Sprite;
        import flash.geom.Matrix3D;
        import flash.geom.Point;
        import flash.geom.Vector3D;
        import flash.geom.Utils3D;
        import flash.geom.PerspectiveProjection;
        import flash.events.*;
 
        public class ImitPP extends Sprite
        {
                var box:Sprite;
                var box2:Sprite;
                var pp:PerspectiveProjection;
                var deltaFOV:int = 15;
 
public function ImitPP():void{
                        if (stage) init();
                                else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
public function init(e:Event = null):void {
                removeEventListener(Event.ADDED_TO_STAGE, init);
                createBoxes();
                pp =  new PerspectiveProjection();
                pp.projectionCenter = new Point(0,0);
                box.transform.perspectiveProjection = pp;
                stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
                }
public function reportKeyDown(event:KeyboardEvent):void {
        deltaFOV = -deltaFOV;
        pp.fieldOfView += deltaFOV;
 
        if (String.fromCharCode(event.charCode) == "c") {
                var mat3D:Matrix3D = pp.toMatrix3D();
                var v3D:Vector3D = Utils3D.projectVector(mat3D, box.transform.matrix3D.position);
                box.transform.matrix3D.position = v3D;
        }
        if (String.fromCharCode(event.charCode) == "a") {
                box.transform.perspectiveProjection = pp;
        }
}
public function createBoxes():void {
                        box= new Sprite();
                        box.graphics.beginFill(0xCCCCFF);
                        box.graphics.drawRect(0, 0, 500, 500);
                        box.graphics.endFill();
                        box.x = 100;
                        box.y = 100;
                        box.z = 50;       
                        addChild(box);
 
                        box2= new Sprite();
                        box2.graphics.beginFill(0x0000ff);
                        box2.graphics.drawRect(0, 0, 100, 100);
                        box2.graphics.endFill();
                        box2.x = 50;
                        box2.y = 50;
                        box2.z = 100;       
                        box.addChild(box2);
                }
        }
 
}



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

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