Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с векторами в 3D пространстве, ориентация объекта 
:(
    Опции темы
Bitter
Дата 29.7.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Что-то я запутался немного.

Есть вектор V, который указывает направление объекта. И вектор V ', указывающий новое направление объекта. Нужно сориентировать объект в этом новом направлении. В принципе ничего сложного, но проблема в том, что объект движется, а менять направление он должен плавно (как самолет разворачивается). И к тому же вектор V ' тоже меняется (собственно он получается от текущей точки в пространстве к точке, в которую должен попасть объект). 

Вопрос вот какой: как плавно поворачивать вектор V и и при этом ориентировать объект по этому вектору. 

Ну для того, чтобы предствить себе это, представим летящий самолет, который получил новые координаты и он разворачивается, чтобы в эти координаты долететь. Вот как это сделать?

Всем спасибо
PM MAIL ICQ Skype   Вверх
arilou
Дата 29.7.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Bitter, а квартернионы ты используешь?

/me summons Mr.DUDA в этот топик  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Bitter
Дата 29.7.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Та вот как раз нет, только матрицы и векторы. Вообще что-то я слабо понимаю как с помощью кватерниона ориентировать объект, он наверное в матрицу преобразуется? Для меня интуитивно понятны вектора, но кватернионы я не могу себе представить.

И, кстати, забыл сказать, что использую DirectX, если возникнет такой вопрос.
PM MAIL ICQ Skype   Вверх
Rickert
Дата 30.7.2008, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Вектора:
P - позиция объекта
V - направление
V' - новое направление
V'' = V
Берём вектор U = (V' - V)
Теперь берём его длинну и делим на время, за которое он должен переориентироваться на новый вектор.
И каждый раз устанавливаем новый вектор направления V'' += U/t

И как вы этого не понимаете, "интуитивно осознавая векторы" - мне не понятно. Думаю вам надо больше уделить внимания не математическому аспекту векторов, а геометрическому смыслу операций над ними. ИМХО


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Bitter
Дата 30.7.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Rickert,  так это же интерполяция, а мне нужен поворот вектора. После интерполяции вектор нужно нормировать, а у меня на экране таких объектов очень много, и нормирование дорогая для меня операция. А поворот не требует нормализации.

Добавлено через 2 минуты и 36 секунд
И к тому же V' меняется на каждом кадре, а по завершению интерполяции направление не будет правильным, так как вектор V' уже несколько раз изменится
PM MAIL ICQ Skype   Вверх
Rickert
Дата 31.7.2008, 04:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Bitter, а с чего ты взял что поворот тебе дешевле станет?
И зачем нормализация?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Bitter
Дата 31.7.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Поворот дешевле тем, что не надо нормировать вектор, а нормализация нужна для того, чтобы сохранить единичную длинну, которая в последствии умножается на скорость. Если не нормировать вектор, то заданная скорость не будет соответствовать.
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 31.7.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 7
Всего: 232



Если объект движется в пространстве, то лучше не вращать его вокруг какой-то точки а менять вектор скорости. Вращение объекта из одного вектора направления в другой делается примерно так:

- считаем cross между векторами V и V', получаем вектор P
- считаем dot между теми же векторами, вычисляем арккосинус, получаем угол alpha
- если dot на втором шаге получился с отрицательным знаком, то меняем знак у P
- делим угол alpha на количество углов поворота, получаем deltaAlpha
- создаём матрицу поворота M с пом. D3DXMatrixRotationAxis(&M, &P, deltaAlpha)

Вращаем вектор V используя D3DXVec3Transform(&V, &V, &M). Векторы V и V' должны быть единичной длины (нормализованными).

Добавлено через 2 минуты и 45 секунд
P.S. я больше по XNA, так что просьба не пинать ногами если что  smile

Добавлено через 5 минут
Цитата(Bitter @  31.7.2008,  11:21 Найти цитируемый пост)
Поворот дешевле тем, что не надо нормировать вектор, а нормализация нужна для того, чтобы сохранить единичную длинну, которая в последствии умножается на скорость. Если не нормировать вектор, то заданная скорость не будет соответствовать.

Поворот будет дороже нормализации, т.к. обычно поворот делается умножением на матрицу, а нормализация - три умножения, два сложения, извлечение квадратного корня и три деления (против гораздо большего числа операций для трансформации через матрицу).


--------------------
user posted image
PM MAIL WWW   Вверх
Rickert
Дата 18.8.2008, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



А если делать поворот через проекцию на базисы или косинус/синус - это ещё дороже, причём раз в 5.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.