22 Сентября 2024, 15:34:06
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Навигация по форуму







guest3d
Quest3D - Русскоязычное сообщество > Quest3D > Логика > Gizmo
Gizmo
(Прочитано 8370 раз)
  [1]
Печать
→|๖ۣۜDen|← | ***** | Администратор | Ветеран | Сообщений: 570 | « 30 Ноября 2010, 19:24:19 »
Gizmo |
0
Создаю простенький редактор с помощью гизмо. С поведением пермещения всё более менее понятно. Но вот с вращением проблемы. Существет 4 поведения вращения объекта: Heading(вращение в XZ), Pitch (вращение в YZ), Bank (XY соответсвенно) и Heading + Pitch (всё полностью).
с Heading'ом проблем почти нет, сделал так, что вращение происходит с точки захвата. А вот дальше ужас несусветный...
Может проблемы с математикой, но должное вращение не происходи при питче. не пойму почему. Нужны свежие взгяды на проблему.
* gizmo.rar (111.42 Кб - загружено 1071 раз.)
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #1 03 Декабря 2010, 12:41:17 »
Re: Gizmo |
1
Создаю простенький редактор с помощью гизмо. С поведением пермещения всё более менее понятно. Но вот с вращением проблемы. Существет 4 поведения вращения объекта: Heading(вращение в XZ), Pitch (вращение в YZ), Bank (XY соответсвенно) и Heading + Pitch (всё полностью).
с Heading'ом проблем почти нет, сделал так, что вращение происходит с точки захвата. А вот дальше ужас несусветный...
Может проблемы с математикой, но должное вращение не происходи при питче. не пойму почему. Нужны свежие взгяды на проблему.

я чуть себе голову не сломал над твоим адским исходником)))
2 вещи которые я точно знаю что нужно исправить:
1. у тебя там есть триггер который срабатывает по отпусканию левой кнопки мыши, и он сохраняет значение поворота для хединга, но он срабатывает и когда ты менял питч, т.е. если я меняю питч то при отпускании оно всё проворачивается по хедингу
2. питч у тебя в половине случаев поворачивает правильно а в половине в обратную сторону, это потому что ты смотришь на плейн с обратной стороны. Если ты поставишь камеру чтоб смотреть снизу вверх на свой объект, то точно так же у тебя будет глючить хединг. Надо ещё проверять знак скалярного произведения зед осей камеры и плейна

ах да, ещё одно, в матрице примитив обжекта ты вместо хединга используешь какой то адский экспрешен валуе, а потом это как то попадает в качестве хединга для плейна по которому ты вращаешь питч, но на самом деле питч то вращается вокруг другой оси. Вобщем если там просто и не затейливо подключить хединг то всё выглядит намного лучше
« Последнее редактирование: 03 Декабря 2010, 12:49:59 от DimiS »
→|๖ۣۜDen|← | ***** | Администратор | Ветеран | Сообщений: 570 | «Ответ #2 03 Декабря 2010, 16:50:42 »
Re: Gizmo |
2
DimiS, спасибо что уделил время на разбор реально аццкого гизмо Веселый Но вот, таким образом, гня свою линию и сражаясь с Эйлером в кошмарах, я таки домучал питч, а вот с банком полная засада...
Невозможно получить Bank value таким же образом как я получал хеадинг и питч валуи...всё дело опять же в математике: если питч и хеадинг своих амплитуд не меняют ([-1;1]), то вот с банком всё сложнее - в зависимости от того, как был последний раз повёрнут питч, на такой угол поворачивается банк. Всё бы хорошо, можно подставить те же значения исходя из "маус интерсекшн ХУ". Но как получить координату критических (максимального и минимального) положений вращения? каждый раз они разные. Вот над этим я сейчас ломаю голову.

* bank_issue.JPG (30.98 Кб, 743x547 - просмотрено 2268 раз.)
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #3 03 Декабря 2010, 19:43:43 »
Re: Gizmo |
3
http://msdn.microsoft.com/en-us/library/bb172972(v=VS.85).aspx

тут уже всё придумано, открываем SDK Quest /VS/качаем DX SDK и радуемся жизни.  Веселый

Многие, у которых стояла проблема вращения объектов в разных пространствах (мировых, вью, локальных, пространствах другого объекта)  месяцами пытались решить её, так и не добившись результата. У кого и получалось что-то сходное  с тем к чему стрелимись, всё равно бросали идею, т.к.  подход через углы эйлера даёт косяки в исключительных ситуациях.

Пытался сам сделать через Эйлера, но после 2ух дней неудач, решил изучить  такую палочку выручалочку как КВАНТЕРНИОН.
Результат - уже через день мой двиг поддерживает бесконечную иерархию и любой  тип трансформаци на любом уровне иерархии, можно перемещать объекты как в локальных предка, так и в мировых координатах/ удалять промежуточные объекты с сохранением мировой позиции предка удаляемого объета  и ещё куча всего ...

Мой выбор за:
D3DXQUATERNION
« Последнее редактирование: 03 Декабря 2010, 19:51:06 от Sqwer »
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #4 04 Декабря 2010, 18:01:26 »
Re: Gizmo |
4
DimiS, спасибо что уделил время на разбор реально аццкого гизмо Веселый Но вот, таким образом, гня свою линию и сражаясь с Эйлером в кошмарах, я таки домучал питч, а вот с банком полная засада...
Невозможно получить Bank value таким же образом как я получал хеадинг и питч валуи...всё дело опять же в математике: если питч и хеадинг своих амплитуд не меняют ([-1;1]), то вот с банком всё сложнее - в зависимости от того, как был последний раз повёрнут питч, на такой угол поворачивается банк. Всё бы хорошо, можно подставить те же значения исходя из "маус интерсекшн ХУ". Но как получить координату критических (максимального и минимального) положений вращения? каждый раз они разные. Вот над этим я сейчас ломаю голову.

я не очень понял суть проблемы, зачем тебе вообще эти координаты критических положений вращения? У тебя есть плейн в котором вращается банк, есть координаты пересечения мышки с этим плейном, есть центр объекта, который тоже лежит на этом плейне. Таким образом ты можешь построить вектор от центра до места пересечения, который лежит в плоскости вращения. Далее тебе нужен второй вектор который лежит в этой плоскости, возьми например ось Y этого плейна, можешь получить умножением вектора (0,1,0) на матрицу плейна (раньше ты просто всегда брал оси которые совпадают с глобальными, для хединга X, для питча Y, ну а тут её надо посчитать). Находишь угол между этими двумя векторами. Всё
Надеюсь правильно понял суть проблемы
« Последнее редактирование: 06 Декабря 2010, 18:04:08 от DimiS »
 
  [1]
Печать
 
Quest3D - Русскоязычное сообщество > Quest3D > Логика > Gizmo
Перейти в: