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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вращение трехмерного тела 
:(
    Опции темы
Bibigon
Дата 22.3.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

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



Не могу понять каким образом управлять вращением тела с помощью углов Эйлера. Может быть кто-нибудь знает как добиться вращения в нужном направлении и как изменить его в другом направлении? Как накапливать это вращение? Ведь оси все время меняют свое положение? Заранее спасибо
PM MAIL   Вверх
mr.DUDA
Дата 22.3.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Есть такой вариант: закрепляем вращение фиксированной "осью Y". То есть, Yaw-вращение (голова влево-вправо) всегда происходит вокруг оси Y (направленной вверх), Pitch-вращение (наклон вверх-вниз) - всегда вокруг оси, лежащей в плоскости с нормалью = фиксированной оси Y, а Roll-вращение (крен влево-вправо) можно либо вообще запретить, либо делать всегда после поворотов Yaw и Pitch.

Неплохое наглядное пособие: на краю диска установлен штатив, по которому вверх-вниз ездит шарик. Диск можно вращать вокруг своей оси, но нельзя наклонять. Камера в этой модели стоит в центре диска и смотрит на шарик. Поворот диска влево-вправо - это Yaw, поворот камеры вслед за перемещениями шарика - это Pitch.


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


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

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



Вариант хороший, но к сожалению фиксированная ось не подходит. Я не могу понять как добиться устойчивого вращения в какую либо сторону отличную от перпендикулярной какой либо оси. Если взять циферблат часов и провести ось Х из 9 в 3 а ось Z из 6 в 12, то как вращая тело по осям XYZ добиться вращения вперед на 2 часа? Я сохраняю углы вращения как углы Эйлера. Углы я перевожу в матрицы, затем делаю действия над матрицами, а потом превращаю опять в углы. Может кто-то сталкивался с подобным?
PM MAIL   Вверх
mr.DUDA
Дата 22.3.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Bibigon @ 22.3.2006, 18:26 Найти цитируемый пост)
Я не могу понять как добиться устойчивого вращения в какую либо сторону отличную от перпендикулярной какой либо оси.

Вращение вокруг произвольной оси всегда можно описать двумя матрицами поворота. Первая матрица поворачивает из начальной ориентации в ориентацию совпадающую с требуемой осью вращения. Вторая матрица поворачивает вокруг оси вращения, которая теперь совпадает с одной из осей X,Y или Z. Накопление поворота - суть изменение угла, задающего вторую матрицу. Всю иерархию матриц можно запихнуть в классы а-ля Node, как это сделано в некоторых движках. Тогда получается, что узлы можно вращать, двигать и масштабировать как угодно, совершенно прозрачно для вложенных в них узлов, т.к. каждый уровень "думает", что преобразования идут от изначальной ориентации X,Y,Z. Очень удобно. Как пример готовой реализации - см. класс Ogre::Node (www.ogre3d.org).


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


Инженер
****


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

Репутация: нет
Всего: 99



Тут пример из жизни:
http://forum.vingrad.ru/index.php?showtopic=22163


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Bibigon
Дата 23.3.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

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



mr.DUDA! Еслия тебя правильно понял, то поворачивая из начальной ориентации в ориентацию совпадающую с требуемой осью вращения тело будет при каждом изменении направления вращения разворачиваться к нему как-бы "лицом"? Этот способ хорош для случаев когда вращают самолет и тп.
Я так понял что есть несколько способов задачи трехмерного вращения . Углы Эйлера, матрицы, кватернионы. Причем у каждого свои плюсы и минусы. А вот как их использовать я и пытаюсь понять.
PM MAIL   Вверх
mr.DUDA
Дата 23.3.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Bibigon @ 23.3.2006, 09:55 Найти цитируемый пост)
mr.DUDA! Еслия тебя правильно понял, то поворачивая из начальной ориентации в ориентацию совпадающую с требуемой осью вращения тело будет при каждом изменении направления вращения разворачиваться к нему как-бы "лицом"? Этот способ хорош для случаев когда вращают самолет и тп.

Не будет. Просто будет крутиться вокруг другой оси.



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


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

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



Цитата(mr.DUDA @ 22.3.2006, 22:23 Найти цитируемый пост)
Первая матрица поворачивает из начальной ориентации в ориентацию совпадающую с требуемой осью вращения.

А по-твоему эта матрица не поворачивает тело лицом в нужную сторону?

PM MAIL   Вверх
Bibigon
Дата 31.3.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

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



Может кто то использовал кватернионы и поделится мнением насчет этого?
PM MAIL   Вверх
mr.DUDA
Дата 1.4.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



С кватернионами сложнее разобраться, ИМХО, чем с матрицами. Лучше юзать готовые библиотеки, как Ogre.


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


Инженер
****


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

Репутация: нет
Всего: 99



А если хочешь все таки разбираться, то вот книга на англ. языке
Tricks of the 3D Game Programming Gurus-Advanced 3D Graphics and Rasterization (Paperback)
в которой до фига всего про написание игр и в том числе про кватернионы...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DragonFire
Дата 2.4.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

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



А так? Перемножаим матрицы и получаем новые координаты точки в пространстве:

* X = X1
ВОЛШЕБНАЯ МАТРИЦА ЧЕТВЕРТОГО ПОРЯДКА * МАТРИЦА КООРДИНАТ ТОЧКИ (Y) = КООРДИНАТЫ НОВОЙ ТОЧКИ (Y1)
* Z = Z1
* 1 = 1

ВОЛШЕБНЫЕ МАТРИЦЫ:
Поворот на угол А по оси Ох
1 0 0 0
0 cos(A) -sin(A) 0
0 sin(A) cos(A) 0
0 0 0 1
Поворот на угол А по оси Оy
cos(A) 0 sin(A) 0
0 1 0 0
-sin(A) 0 cos(A) 0
0 0 0 1
Поворот на угол А по оси Оz
cos(A) -sin(A) 0 0
sin(A) cos(A) 0 0
0 0 1 0
0 0 0 1

Это сообщение отредактировал(а) DragonFire - 2.4.2006, 18:49


--------------------
PM MAIL ICQ   Вверх
cardinal
Дата 2.4.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: нет
Всего: 99



А на хрена матрица четвертого порядка?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DENNN
Дата 3.4.2006, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 3
Всего: 43



cardinal, чтоб умножать удобнее.
PM ICQ   Вверх
cardinal
Дата 3.4.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: нет
Всего: 99



То есть?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DragonFire
Дата 3.4.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

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



Тоесть умные люди придумали умные формулы...
Ты же не будешь спрашивать почему в дискриминанте корень квадратный, а не кубический? smile


--------------------
PM MAIL ICQ   Вверх
cardinal
Дата 3.4.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: нет
Всего: 99



Корень квадратный потому, что квадратный нужен, а с матрицами непонятно зачен нужна матрица четвертого порядка...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DragonFire
Дата 4.4.2006, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

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



Потому что это формула такая.
Умные люди вывели.


--------------------
PM MAIL ICQ   Вверх
cardinal
Дата 4.4.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: нет
Всего: 99



Ты так и не понял о чем я. Посмотри тут:
http://www.someoneltd.boom.ru/MATH/Trnsfrms.htm
Видишь некую схожесть с теми матрицами, что ты написал?

Иногда полезно понимать, что ты делаешь, а не делать приговаривая "так умные дюди делют"... smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DragonFire
Дата 4.4.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

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



Хм... Да, спасибо, щас на досуге покопаюсь в матрицах этих... Может пойму че-нибудь smile
Спасибо smile


--------------------
PM MAIL ICQ   Вверх
Maniac
Дата 5.4.2006, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 27.2.2006

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



Вершину можно задать 4 числами X,Y,Z,W в виде матрицы, где W не равно 0. W - это коэффициент перспективы, необходимый для работы в 3Д пространстве. В таком случае координаты вершин будут равны X/W, Y/W, Z/W и представляются в виде обыкновенной матрицы 4х4
PM MAIL   Вверх
cardinal
Дата 5.4.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: нет
Всего: 99



Да, спасибо - это видимо проще, чем я думал... smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Bibigon
Дата 5.4.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

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



Спасибо за совет, но мне совсем не понятно как осуществить поворот с помощью матриц относительно произвольной оси. И что делать если поворотов много? Как сделать эту ось абсолютной или относительной? Примеров таких я не встречал. Например в книге "Physics modeling for game programmers" David Conger лишь упоминает о кватернионах, пишет если вы чувствуете себя смелым я приглашаю вас самих окунуться в мир кватернионов. И привет. Базовые действия с матрицами и кватернионами я понимаю, а что делать потом?
PM MAIL   Вверх
cardinal
Дата 5.4.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: нет
Всего: 99



Цитата(Bibigon @ 5.4.2006, 12:28 Найти цитируемый пост)
И что делать если поворотов много? Как сделать эту ось абсолютной или относительной? Примеров таких я не встречал.

Вот тут как я уже говорил есть пример, но он не доработан (что касается произвольной оси), посмотри, поразбирайся...
http://forum.vingrad.ru/index.php?showtopic=22163


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Maniac
Дата 6.4.2006, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 27.2.2006

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



Цитата(Bibigon @ 5.4.2006, 14:28 Найти цитируемый пост)
Как сделать эту ось абсолютной или относительной?


Когда ты размещаешь объекты в сцене то ты работаешь с абс. координатами также ты можешь эти координаты 'повернуть' или 'транспонировать'. Когда тебе нужно повернуть только твой объект ты работаешь с относительными координатами (относительно твоего объекта).

Для изменения абс. координат ты пользуешься rotate и translating
Для изменения относит. - сохраняешь матрицу (в OpenGL - PushMatrix()) делаешь translating в нужную точку и крутишь его относительно своих координат rotate'ом, потом возвращаешь глобальную матрицу PopMatrix(). На экране видишь, что объект находится относительно координаты 0,0,0 на расстоянии которое ты указал при транспонировании.

Функции в DirectX:

D3DXMatrixTranslation, D3DXMatrixRotationX {Y,Z}, вместо сохранения/загрузки матрицы я делаю D3DXMatrixTranslation (x,y,z); работаю, потом обратно DXMatrixTranslation (0,0,0); хотя можно и сохранять матрицу (зависит от того как написать прогу))

Цитата(Bibigon @ 5.4.2006, 14:28 Найти цитируемый пост)
И что делать если поворотов много?


Нет ограничений на сохранения глоб. матрицы (в OpenGL ограничения только на вложенность сохранений)

сохраняй, делай повороты, возвращай, сохраняй, делай повороты, возвращай и т.д.


Существуют еще повороты вокруг собственной оси X,Y,Z - это означает, что когда ты делаешь поворот (rotate) ты вертишь вокруг одной оси (представь себе оси, ты вертишь вокруг выбраной на угол который задал, причем центр объекта находиться в точке 0,0,0 всегда)
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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