Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.03.2010, 19:44
sweetPepper вне форума Посмотреть профиль Отправить личное сообщение для sweetPepper Найти все сообщения от sweetPepper
  № 1  
Ответить с цитированием
sweetPepper

Регистрация: Jul 2009
Сообщений: 57
По умолчанию вращение в 3-мерном пространстве

У меня проблемка с вращением куба. При rotationY кратному 90 rotationX начинает вести себя как rotationZ.
Вложения
Тип файла: rar cub.rar (25.3 Кб, 93 просмотров)

Старый 28.03.2010, 22:07
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
так и должно быть: rotationX/Y/Z это углы в собственной системе координат объекта, rotationX им же и остается для самого куба, но поскольку он сам повернут, то в родителе это выглядит иначе..
поворот относительно координат родителя можно реализовать за счет редактирования transform.matrix3D, типа такого
Код AS3:
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);
 
}

Старый 29.03.2010, 03:45
sweetPepper вне форума Посмотреть профиль Отправить личное сообщение для sweetPepper Найти все сообщения от sweetPepper
  № 3  
Ответить с цитированием
sweetPepper

Регистрация: Jul 2009
Сообщений: 57
Честно говоря, не совсем понял о чем речь.
Почему система координат изменяется только для rotationX и только при изменении rotationY? Все остальные вариациии ни к чему не приводят....
Как вышеописанную ф-ю применить для поворота куба?

Старый 29.03.2010, 19:12
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>Почему система координат изменяется только для rotationX и только при изменении rotationY?
связка только rotationX - только при изменении rotationY - это скорее всего твой частный случай: система координат по-любому вращается вместе с объектом, со всеми вытекающими.., присмотрись поплотнее - нет никакой исключительности в rotationX-rotationY

>>Как вышеописанную ф-ю применить для поворота куба?
применить те же самые манипуляции к transform.matrix3D этого куба
мой пример 'от первого лица', т.е. как бы метод самого куба

глянь http://silin.su/#AS3/zod , там есть примеров всякого вращения

Старый 30.03.2010, 02:50
sweetPepper вне форума Посмотреть профиль Отправить личное сообщение для sweetPepper Найти все сообщения от sweetPepper
  № 5  
Ответить с цитированием
sweetPepper

Регистрация: Jul 2009
Сообщений: 57
transform.matrix3D==null

Старый 30.03.2010, 12:30
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
все правильно, transform.matrix3D не определена до тех пор пока не задашь хоть какое из '3D-шных' свойств,
z=0, например, достаточно

Старый 30.03.2010, 14:54
greegreeman вне форума Посмотреть профиль Отправить личное сообщение для greegreeman Найти все сообщения от greegreeman
  № 7  
Ответить с цитированием
greegreeman
 
Аватар для greegreeman

Регистрация: Jan 2010
Сообщений: 147
раз уж тут обсуждается 3D вращение, то подскажите, плиз, похожий ли это пример: http://www.shimanoservicecentre.co.uk/
я имею ввиду на куб, который в теме обсуждался. и может есть разбор где-то у кого-то в блоге как делаются подобные штуки, а то с моим опытом не знаю как к ней подступиться

Старый 30.03.2010, 20:13
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не, непохожий..
в этом примере 3Д ни причем вовсе
подступиться очень просто: позиция и масштаб иконок - функция некоторого угла, зависящего от положения мыши, все тривиально считается через sin-cos

Старый 30.03.2010, 23:23
sweetPepper вне форума Посмотреть профиль Отправить личное сообщение для sweetPepper Найти все сообщения от sweetPepper
  № 9  
Ответить с цитированием
sweetPepper

Регистрация: Jul 2009
Сообщений: 57
spasibo, сiлiн))

Старый 09.06.2010, 12:56
gen4 вне форума Посмотреть профиль Отправить личное сообщение для gen4 Найти все сообщения от gen4
  № 10  
Ответить с цитированием
gen4

Регистрация: May 2006
Сообщений: 79
Silin, спасибо, смотрю примеры

Добавлено через 2 часа 7 минут
Не смог разобраться. Твой пример, silin, мне кажется о центре вращения, но не об ориентации осей, нет? Почему у тебя это работает ?))

вот, что делаю я:
Код AS3:
 
		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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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