![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jul 2009
Сообщений: 57
|
У меня проблемка с вращением куба. При rotationY кратному 90 rotationX начинает вести себя как rotationZ.
|
|
|||||
|
так и должно быть: rotationX/Y/Z это углы в собственной системе координат объекта, rotationX им же и остается для самого куба, но поскольку он сам повернут, то в родителе это выглядит иначе..
поворот относительно координат родителя можно реализовать за счет редактирования transform.matrix3D, типа такого public function rotateXY(angleX:Number, angleY:Number=0):void { var mtrx:Matrix3D = transform.matrix3D ; var pos:Vector3D = mtrx.position; //двигаем в начало координат mtrx.appendTranslation( -pos.x, -pos.y, -pos.z); //вращаем mtrx.appendRotation(angleX, Vector3D.X_AXIS) mtrx.appendRotation(angleY, Vector3D.Y_AXIS) //двигаем назад mtrx.appendTranslation( pos.x, pos.y, pos.z); } |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 57
|
Честно говоря, не совсем понял о чем речь.
Почему система координат изменяется только для rotationX и только при изменении rotationY? Все остальные вариациии ни к чему не приводят.... Как вышеописанную ф-ю применить для поворота куба? |
|
|||||
|
>>Почему система координат изменяется только для rotationX и только при изменении rotationY?
связка только rotationX - только при изменении rotationY - это скорее всего твой частный случай: система координат по-любому вращается вместе с объектом, со всеми вытекающими.., присмотрись поплотнее - нет никакой исключительности в rotationX-rotationY >>Как вышеописанную ф-ю применить для поворота куба? применить те же самые манипуляции к transform.matrix3D этого куба мой пример 'от первого лица', т.е. как бы метод самого куба глянь http://silin.su/#AS3/zod , там есть примеров всякого вращения |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 57
|
transform.matrix3D==null
|
|
|||||
|
Регистрация: Jan 2010
Сообщений: 147
|
раз уж тут обсуждается 3D вращение, то подскажите, плиз, похожий ли это пример: http://www.shimanoservicecentre.co.uk/
я имею ввиду на куб, который в теме обсуждался. и может есть разбор где-то у кого-то в блоге как делаются подобные штуки, а то с моим опытом не знаю как к ней подступиться |
|
|||||
|
не, непохожий..
в этом примере 3Д ни причем вовсе подступиться очень просто: позиция и масштаб иконок - функция некоторого угла, зависящего от положения мыши, все тривиально считается через sin-cos |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 57
|
spasibo, сiлiн))
|
|
|||||
|
Регистрация: May 2006
Сообщений: 79
|
Silin, спасибо, смотрю примеры
Добавлено через 2 часа 7 минут Не смог разобраться. Твой пример, silin, мне кажется о центре вращения, но не об ориентации осей, нет? Почему у тебя это работает ?)) вот, что делаю я: function onLoop(evt:Event=null):void { // беру положение мыши dx += (mouseX - dx) / 4; dy += (mouseY - dy) / 4; // теперь от 0 до пи*2 var b = dx / 550 * Math.PI * 2 var a = dy / 400 * Math.PI * 2 // обнуляем заранее определенную матрицу m.identity(); //крутим m.appendRotation(dx, Vector3D.X_AXIS) m.appendRotation(dy, Vector3D.Y_AXIS) //каждому вектору (ранее объявленному) применяем вращение for (var i = 0; i < points3D.length; i++ ) { a = m.transformVector( points3D[i]); parts[i].x = a.x*111+222; parts[i].y = a.y*111+222; parts[i].z0 = a.z * 100; parts[i].fader.alpha = .7-a.z } //сортируем по зэду parts.sort(sortOn); for (i in parts) { setChildIndex(parts[i], i); } } оок. пробую recompose с объявлением вращения - те же яйца. Вопрос - как быть, и что делать? Все что описано до этого меня не уразумило, увы. Последний раз редактировалось gen4; 09.06.2010 в 13:19. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|