![]() |
|
Модераторы: Rickert |
![]()
|
|
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Что-то я запутался немного.
Есть вектор V, который указывает направление объекта. И вектор V ', указывающий новое направление объекта. Нужно сориентировать объект в этом новом направлении. В принципе ничего сложного, но проблема в том, что объект движется, а менять направление он должен плавно (как самолет разворачивается). И к тому же вектор V ' тоже меняется (собственно он получается от текущей точки в пространстве к точке, в которую должен попасть объект). Вопрос вот какой: как плавно поворачивать вектор V и и при этом ориентировать объект по этому вектору. Ну для того, чтобы предствить себе это, представим летящий самолет, который получил новые координаты и он разворачивается, чтобы в эти координаты долететь. Вот как это сделать? Всем спасибо |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Bitter, а квартернионы ты используешь?
/me summons Mr.DUDA в этот топик |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Та вот как раз нет, только матрицы и векторы. Вообще что-то я слабо понимаю как с помощью кватерниона ориентировать объект, он наверное в матрицу преобразуется? Для меня интуитивно понятны вектора, но кватернионы я не могу себе представить.
И, кстати, забыл сказать, что использую DirectX, если возникнет такой вопрос. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
Вектора:
P - позиция объекта V - направление V' - новое направление V'' = V Берём вектор U = (V' - V) Теперь берём его длинну и делим на время, за которое он должен переориентироваться на новый вектор. И каждый раз устанавливаем новый вектор направления V'' += U/t И как вы этого не понимаете, "интуитивно осознавая векторы" - мне не понятно. Думаю вам надо больше уделить внимания не математическому аспекту векторов, а геометрическому смыслу операций над ними. ИМХО -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Rickert, так это же интерполяция, а мне нужен поворот вектора. После интерполяции вектор нужно нормировать, а у меня на экране таких объектов очень много, и нормирование дорогая для меня операция. А поворот не требует нормализации.
Добавлено через 2 минуты и 36 секунд И к тому же V' меняется на каждом кадре, а по завершению интерполяции направление не будет правильным, так как вектор V' уже несколько раз изменится |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
Bitter, а с чего ты взял что поворот тебе дешевле станет?
И зачем нормализация? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Поворот дешевле тем, что не надо нормировать вектор, а нормализация нужна для того, чтобы сохранить единичную длинну, которая в последствии умножается на скорость. Если не нормировать вектор, то заданная скорость не будет соответствовать.
|
|||
|
||||
| mr.DUDA |
|
|||
|
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, так что просьба не пинать ногами если что Добавлено через 5 минут Поворот будет дороже нормализации, т.к. обычно поворот делается умножением на матрицу, а нормализация - три умножения, два сложения, извлечение квадратного корня и три деления (против гораздо большего числа операций для трансформации через матрицу). -------------------- ![]() |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
А если делать поворот через проекцию на базисы или косинус/синус - это ещё дороже, причём раз в 5.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |