Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   3D поворот карты с 2мя сторонами (http://www.flasher.ru/forum/showthread.php?t=187674)

Скрипун 22.11.2012 17:30

3D поворот карты с 2мя сторонами
 
Доброго дня,

Нашел для этой задачи пример на сайте http://www.flashandmath.com/flashcs4/rotator/
Все было хорошо, но заметил, что когда у объекта минусовые координаты по "x" смена сторон происходит с запаздыванием

Код AS3:

        private function sortFaces():void {
                var dotProd:Number;
                var thisGlobalPos:Vector3D=new Vector3D();
                var toObserver:Vector3D=new Vector3D();
                var normalGlobalEnd:Vector3D=new Vector3D();
                var normalGlobalVec:Vector3D=new Vector3D();
                var observerPos:Vector3D=new Vector3D();
                observerPos.x=root.transform.perspectiveProjection.projectionCenter.x;
                observerPos.y=root.transform.perspectiveProjection.projectionCenter.y;
                observerPos.z=-root.transform.perspectiveProjection.focalLength;
                thisGlobalPos=contBack.transform.getRelativeMatrix3D(root).position.clone();
                normalGlobalEnd=normalEnd.transform.getRelativeMatrix3D(root).position.clone();
                normalGlobalVec=normalGlobalEnd.subtract(thisGlobalPos);
                toObserver=observerPos.subtract(thisGlobalPos);
                dotProd=normalGlobalVec.x*toObserver.x+normalGlobalVec.y*toObserver.y+normalGlobalVec.z*toObserver.z;
                if(dotProd>=0){
                        card.addChild(contFront);
                }
                else
                {
                        card.addChild(contBack);
                }
        }

не могу понять в чем может быть проблема.
Кто сталкивался или знает другое решение -- отзовитесь

silin 22.11.2012 22:34

попробуй по-простому, без отсылок ко всем этим perspectiveProjection рута и проч. getRelativeMatrix3D
Код AS3:

P0:Point = new Point(0, 0);
P1:Point = new Point(100, 0);
P2:Point = new Point(0, 100);
var p0:Point = card.localToGlobal(P0);
var p1:Point = card.localToGlobal(P1);
var p2:Point = card.localToGlobal(P2);
 
var dotProd: Number = (p1.x - p0.x) * (p2.y - p1.y) - (p1.y - p0.y) * (p2.x - p1.x);

если это только для определения какая грань видима, то должно сработать

Скрипун 23.11.2012 02:42

а что такое P0-P2 ?

silin 23.11.2012 08:18

абстрактный треугольник в плоскости спрайта, взаимное расположение его вершин в координатах рута определяет ориентацию

Скрипун 23.11.2012 13:47

silin, респект и уважение! Оно работает!!!


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

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