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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.12.2009, 15:20
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 1  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Question Вращение 3D-объекта, Five3D

Привет всем, с наступающим 2010 годом. Желаю побольше интересных проектов и побольше отдыхать!

Теперь, собственно, вопрос к 3D-математикам:
мне нужно сделать бесконечное вращение объекта, находящегося в позиции (0, 0, 0) вокруг себя в зависимости от положения курсора мыши. Примерно так:

(картинка кликабельна, переходит на SWF-ку с примером)

Я использую движок Five3D. Проблема в вычислении значений углов (rotationX, rotationY и rotationZ) у вращаемого объекта (тут - куба). Делаю так:
Код AS3:
	private function onFrame(event:Event):void {
		_body.rotationX +=  _xOffset;
		_body.rotationY += -_yOffset;
	}
Но у меня объект как бы проворачивается и получается, что каждые вторые ПИ (180 градусов) у меня крутит корректно, остальные - нет.
Подскажите какие тут колдовства, матрицы и т.д. нужно применить?

Суммируя вышеизложенное:
Дано: угол в плоскости экрана, на который нужно повернуть;
Требуется: найти значения rotationX, rotationY и rotationZ для вращаемгого объекта.

Спасибо.


Последний раз редактировалось enepx; 25.12.2009 в 15:22.
Старый 25.12.2009, 21:00
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Во флеше угол имеет значения от 0 до 180 и от 0 до -180 (это верно для rotation).
Попробуйте поставить условие на присвоение.
Код AS3:
_body.rotationX +=  (_xOffset < 180)?_xOffset:_xOffcet - 360;
Хотя если у вас программа под 10-й плеер должно работать и без этого, rotationX/Y/Z корректно воспринимает любые углы.

Старый 25.12.2009, 21:25
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 3  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
углы сами считаются по основанию 360, т.е. 721 = 1.
Не думаю, что встроенное в FP10 3d решит мою проблему влет.

Старый 26.12.2009, 06:28
Dos87 вне форума Посмотреть профиль Отправить личное сообщение для Dos87 Найти все сообщения от Dos87
  № 4  
Ответить с цитированием
Dos87
[+1 02.07.09]

Регистрация: Jun 2009
Сообщений: 39
Может так?
Код AS3:
private function onFrame(event:Event):void {
		_body.rotationX += _yOffset;
		_body.rotationY += -_xOffset;
	}

Старый 26.12.2009, 09:45
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 5  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Цитата:
Сообщение от Dos87 Посмотреть сообщение
Может так?
Код AS3:
private function onFrame(event:Event):void {
		_body.rotationX += _yOffset;
		_body.rotationY += -_xOffset;
	}
Нет, не работает. Тут не так просто решается. Тут зависимость от угла, вычисляться вроде должно через sin/cos.

Старый 26.12.2009, 10:57
Dos87 вне форума Посмотреть профиль Отправить личное сообщение для Dos87 Найти все сообщения от Dos87
  № 6  
Ответить с цитированием
Dos87
[+1 02.07.09]

Регистрация: Jun 2009
Сообщений: 39
Значит так =)
Код AS3:
private function onFrame(event:Event):void
{
	_body.transform.matrix3D.appendRotation(_yOffset, Vector3D.YAXIS);
	_body.transform.matrix3D.appendRotation(_xOffset, Vector3D.XAXIS);
}

Старый 26.12.2009, 12:35
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 7  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Цитата:
Сообщение от Dos87 Посмотреть сообщение
Значит так =)
Код AS3:
private function onFrame(event:Event):void
{
	_body.transform.matrix3D.appendRotation(_yOffset, Vector3D.YAXIS);
	_body.transform.matrix3D.appendRotation(_xOffset, Vector3D.XAXIS);
}
у меня FP9, а не FP10, потому и юзаю Five3D.

Старый 26.12.2009, 20:35
Dos87 вне форума Посмотреть профиль Отправить личное сообщение для Dos87 Найти все сообщения от Dos87
  № 8  
Ответить с цитированием
Dos87
[+1 02.07.09]

Регистрация: Jun 2009
Сообщений: 39
Не пользовался Five3D, но думаю, он должен поддерживать матрицы. Если даже нет - можно создать класс матрицы самому.

Вот ссылка на матрицы поворота
http://ru.wikipedia.org/wiki/%D0%9C%...BE%D1%82%D0%B0

Суть в том, что куб у тебя крутится вокруг своей оси, а не вокруг глобальной оси. Следовательно при повороте вокруг одной оси, две другие оси увеличивают свой угол относительно начала координат, на угол поворота.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
five3d , rotation , вращение
Опции темы
Опции просмотра

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

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


 


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


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