![]() |
|
Модераторы: Rickert |
![]()
|
|
| Bibigon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.2.2006 Репутация: нет Всего: нет |
Не могу понять каким образом управлять вращением тела с помощью углов Эйлера. Может быть кто-нибудь знает как добиться вращения в нужном направлении и как изменить его в другом направлении? Как накапливать это вращение? Ведь оси все время меняют свое положение? Заранее спасибо
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Есть такой вариант: закрепляем вращение фиксированной "осью Y". То есть, Yaw-вращение (голова влево-вправо) всегда происходит вокруг оси Y (направленной вверх), Pitch-вращение (наклон вверх-вниз) - всегда вокруг оси, лежащей в плоскости с нормалью = фиксированной оси Y, а Roll-вращение (крен влево-вправо) можно либо вообще запретить, либо делать всегда после поворотов Yaw и Pitch.
Неплохое наглядное пособие: на краю диска установлен штатив, по которому вверх-вниз ездит шарик. Диск можно вращать вокруг своей оси, но нельзя наклонять. Камера в этой модели стоит в центре диска и смотрит на шарик. Поворот диска влево-вправо - это Yaw, поворот камеры вслед за перемещениями шарика - это Pitch. -------------------- ![]() |
|||
|
||||
| Bibigon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.2.2006 Репутация: нет Всего: нет |
Вариант хороший, но к сожалению фиксированная ось не подходит. Я не могу понять как добиться устойчивого вращения в какую либо сторону отличную от перпендикулярной какой либо оси. Если взять циферблат часов и провести ось Х из 9 в 3 а ось Z из 6 в 12, то как вращая тело по осям XYZ добиться вращения вперед на 2 часа? Я сохраняю углы вращения как углы Эйлера. Углы я перевожу в матрицы, затем делаю действия над матрицами, а потом превращаю опять в углы. Может кто-то сталкивался с подобным?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Вращение вокруг произвольной оси всегда можно описать двумя матрицами поворота. Первая матрица поворачивает из начальной ориентации в ориентацию совпадающую с требуемой осью вращения. Вторая матрица поворачивает вокруг оси вращения, которая теперь совпадает с одной из осей X,Y или Z. Накопление поворота - суть изменение угла, задающего вторую матрицу. Всю иерархию матриц можно запихнуть в классы а-ля Node, как это сделано в некоторых движках. Тогда получается, что узлы можно вращать, двигать и масштабировать как угодно, совершенно прозрачно для вложенных в них узлов, т.к. каждый уровень "думает", что преобразования идут от изначальной ориентации X,Y,Z. Очень удобно. Как пример готовой реализации - см. класс Ogre::Node (www.ogre3d.org). -------------------- ![]() |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Bibigon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.2.2006 Репутация: нет Всего: нет |
mr.DUDA! Еслия тебя правильно понял, то поворачивая из начальной ориентации в ориентацию совпадающую с требуемой осью вращения тело будет при каждом изменении направления вращения разворачиваться к нему как-бы "лицом"? Этот способ хорош для случаев когда вращают самолет и тп.
Я так понял что есть несколько способов задачи трехмерного вращения . Углы Эйлера, матрицы, кватернионы. Причем у каждого свои плюсы и минусы. А вот как их использовать я и пытаюсь понять. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Не будет. Просто будет крутиться вокруг другой оси. -------------------- ![]() |
|||
|
||||
| Bibigon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.2.2006 Репутация: нет Всего: нет |
||||
|
||||
| Bibigon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.2.2006 Репутация: нет Всего: нет |
Может кто то использовал кватернионы и поделится мнением насчет этого?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
С кватернионами сложнее разобраться, ИМХО, чем с матрицами. Лучше юзать готовые библиотеки, как Ogre.
-------------------- ![]() |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
А если хочешь все таки разбираться, то вот книга на англ. языке
Tricks of the 3D Game Programming Gurus-Advanced 3D Graphics and Rasterization (Paperback) в которой до фига всего про написание игр и в том числе про кватернионы... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
А на хрена матрица четвертого порядка?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
cardinal, чтоб умножать удобнее.
|
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
То есть?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |