Flex, 3D-перемещение и вращение объектов - PullRequest
0 голосов
/ 28 марта 2011

Мне нужно перемещаться между (повернутыми) объектами в изгибе вдоль x, y или z в качестве независимого наблюдателя. Движение относительно x, y работает нормально, но когда я иду вдоль оси z, наблюдатель ведет себя так, как если бы он был отделен от системы xyz объектов и не идет прямо к объекту, но, например, по диагонали. Вот некоторый пробный код спасибо за помощь

Снимок экрана можно найти здесь http://i.stack.imgur.com/jyuhN.png

var dx1:Number=Math.cos(degToRad(currentZRotation))*xDiff;
        var dy1:Number=-Math.sin(degToRad(currentZRotation))*xDiff;
        var dy2:Number=Math.cos(degToRad(currentZRotation))*yDiff;
        var dx2:Number=Math.sin(degToRad(currentZRotation))*yDiff;
        xDiff=dx1+dx2;
        yDiff=dy1+dy2;
        var xyx:Number=Math.cos(degToRad(currentYRotation))*xDiff;
        var aux:Number=Math.sin(degToRad(currentYRotation))*xDiff;
        var xxy:Number=Math.sin(degToRad(currentXRotation))*aux;
        var xxz:Number=Math.cos(degToRad(currentXRotation))*aux;
        var yxz:Number=-Math.sin(degToRad(currentXRotation))*yDiff;
        var yxy:Number=Math.cos(degToRad(currentXRotation))*yDiff;
        var zyz:Number=0;
        var zxy:Number=0;
        var zyx:Number=0;
        zxy=sign(Math.cos(degToRad(currentYRotation)))*Math.sin(degToRad(currentXRotation))*zDiff;
        aux=Math.cos(degToRad(currentXRotation))*zDiff;
        zyx=-sign(Math.cos(degToRad(currentXRotation)))*Math.sin(degToRad(currentYRotation))*aux;
        zyz=Math.cos(degToRad(currentYRotation))*aux;   
        currentX += xyx+zyx;
        currentY += yxy+zxy+xxy;
        currentZ += zyz+xxz+yxz;

1 Ответ

0 голосов
/ 28 марта 2011

Подождите, вы реализуете свой собственный элементарный 3d-движок? Почему бы не использовать одну из многих альтернатив с открытым исходным кодом, которая уже делает все это? Как Йогурт , Альтернатива (мой личный фаворит) или Away3d .

Кроме того, просто глядя на ваш код, я могу сказать, что вы немного усложнили проблему. Если бы я был тобой, я бы больше смотрел на Векторы, чем на вычисления в градусах (поверь мне), и смотрю на Матрицы, как упоминал Роб. Это также может быть у вас над головой (Fisix сложно: P), поэтому я рекомендую использовать готовые 3d движки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...