2011-03-28 3 views
0

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

Скриншота можно найти здесь 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

Не ответ на ваш вопрос, но я настоятельно рекомендую взять хорошую книгу по 3D-графике и прочитать на матрицах трансформации. Это сэкономит вам много головных болей в долгосрочной перспективе. –

+0

Я бы рекомендовал предоставить несколько скриншотов того, что вы хотите, и что это на самом деле. И, возможно, запускаемое приложение, поэтому нам легко проверить. @Rob Агар Есть ли у вас рекомендации по книге? – JeffryHouser

+0

@ www.Flextras.com Трехмерная компьютерная графика Алана Уотта была выборкой группы, когда я получал удовольствие от концепций, но это было некоторое время назад: \ –

ответ

0

Подождите, вы реализуете свой собственный элементарную 3d движка? Почему бы не использовать одну из немногих альтернатив с открытым исходным кодом, которая уже делает все это? Вроде Yogurt, Alternativa (мой личный fav) или Away3d.

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

+0

Спасибо :) Для обучения я хочу попробовать это, не добавляя 3d-движок. Вернемся к геометрии. – gabi

+0

Опять же, не используйте геометрию. Физика работает не так. Они работают с векторами. Вы можете попытаться научиться этому, но вы уже направляетесь не так. Вы также должны попытаться узнать, как повысить производительность вашего ActionScript. Возможно, вам захочется взглянуть на другие двигатели, так как они с открытым исходным кодом и получить представление о том, как сделать преобразование. –

Смежные вопросы