Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
|
1 | |
Как математически зная только вектор вычислить кватернион?20.04.2015, 22:15. Просмотров 5366. Ответов 154
Метки нет Все метки)
(
Создаю направленный источник света в максе.
Свойством dir в MAXSctipt судя по справке, я получаю нормализованный вектор направления. Также есть свойство rotation которое возвращает углы вращения в кватернионах. По сути эти два свойства определяют одно и тоже - куда будет смотреть проектор. Изменяя одно из них, видны изменения и в другом. Вопрос в том, как математически зная только вектор вычислить кватернион? У меня есть записи свойств объектов на подобии SpotLight из которых известны только позиция и вектор направления. Эту информацию нужно конвертировать в другой редактор, который работает только с позицией и кватернионом. Кароче, как из трех чисел получить четыре?
0
|
|
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
20.04.2015, 22:15 |
Ответы с готовыми решениями:
154
Как отправить файл на сервер через FTP не зная имени а зная только расширение файла? Найти вектор x,зная что вектор x перпендикулярен вектору a вычислить площадь и периметр равнобедренного треугольника зная только его катеты Как найти вектор направления тела, зная угол поворота? Вычислить и отнормировать вектор, полученный как произведение матрицы A на вектор B |
Заблокирован
|
|
20.04.2015, 22:44 | 2 |
Из каких именно трех? и какие именно четыре? Кватернион это ось вращения и поворот относительно нее. К какой локальной оси объекта он должен быть привязан? Насколько понимаю он привязывается к Direction т.е есть, и надо найти крен. rotation какие именно углы возвращает? не он ли искомое четвертое число?
Добавлено через 7 минут Никак. крен может быть любой вокруг оси направления. т.е - есть ось, а угла вращения нету, соответсвенно повернуто сохраняя это же направление может быть как угодно (на все 360). Добавлено через 3 минуты вообще для однозначного определения положения в простанстве нужны либо 2 неколлинеарных вектора либо один вектор и угол поворота относительно него.
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
|
21.04.2015, 09:18 [ТС] | 3 |
Я тоже был в этом убежден, но как оказалось это не так.
Вообщем есть информация о моделях и скрипт для макса, который их импортирует. Внутри модели хранится информация о множестве источников света и их расположению относительно родителя(локальная система координат). Так вот глядя в процес построения максовского источника света на основе исходного задаются только свойства pos и dir. Оба это значения XYZ. И только на основе этого проекторы смотрят туда куда надо. Я пишу на C# и мне нужно вручную вычислить вращение объекта в пространстве в кватернионах на основе вектора правления. Вопрос в том по какой формуле это сделать. Есть XYZ расположения объекта и XYZ вектора направления. Нужно получить XYZW (кватернион).
0
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
|
21.04.2015, 09:24 [ТС] | 4 |
0
|
21.04.2015, 09:24 | |
Заблокирован
|
|
21.04.2015, 17:34 | 5 |
НУ если как второй вектор использовать сам радиус-вектор позиции то. можно попробовать, но не факт что ориентация в пространстве будет такая как задуманна и соответственно есть пара ограничений: объект не может быть рассположенв центре ГСК, объект не должен смотреть в центр ГСК.
Векторно умножаешь Direction на Position, получаешь вторую ось, нормализуешь ее, потом эту вторую ось умножаешь векторно на Direction вот тебе три оси (а соответсвенно и матрица поворота из которой можно получить кватернион). наклон второй оси относительно плоскости xoz (z в глубину) можно использовать как угол крена. В принципе как угол крена можно использовать и угол между радиус-вектором позиции и xoz но отсчет начала угла будет поверутна 90 градусов. Добавлено через 5 минут Ну и простое решение - расставь крен 0. для источника света если он не проектор крен не важен. Опять же использовать будешь в редакторе, там по результату можно крен подправить.
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
||||||
21.04.2015, 18:07 [ТС] | 6 | |||||
Fulcrum_013, код на C#:
0
|
Заблокирован
|
|
21.04.2015, 18:15 | 7 |
Как его получить? Должна быть функция которая из матрицы ЛСК делает кватернион сейчас в DXSDK залезу посмотрю. Direction тоже должна быть предварительно нормализована.
Добавлено через 4 минуты D3DXQuaternionRotationMatrix функция называется из матрицы поворота ЛСК делает кватернион. Полученные три вектора и есть столбцы матрицы поворота.
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
|
21.04.2015, 18:16 [ТС] | 8 |
Fulcrum_013, в сторонних библиотеках типа XNA есть подобные штуки, но это слишком громоздко для такого мелкого решения, оптимальный вариант самим написать функцию. Как математически это вычисляется?
Добавлено через 1 минуту Fulcrum_013, это оно - http://www.euclideanspace.com/maths/...xToQuaternion/ ?
0
|
Заблокирован
|
|
21.04.2015, 18:19 | 9 |
ну а вообще если там аналога нету - то делаешь проекцию второй оси на xoz, и находишь угол между осью и ее проекцией это и есть угол кватерниона (в зависимости от того с какой из двух найденных осей находишь углол относительно XOZ отсчет угла сдвигается на 90 градусов)
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
||||||
21.04.2015, 18:28 [ТС] | 10 | |||||
Попытался поработать с матрицей:
вообще ничего не понял( у меня есть встроенный метод нахождения угла между двумя векторами, и к чему мне его применить?
0
|
Заблокирован
|
||||||
21.04.2015, 18:40 | 11 | |||||
Более простой вариант находишь угол между третьей осью и осью ОY (0,1,0). Скалярное произведение-косинус угла, векторное - синус. Ну а если с проекцией - то у заданной оси обнуляешь Y это и есть ее проекция на XOZ.
Добавлено через 6 минут т.е. высчитал ось сделал
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
||||||
21.04.2015, 18:44 [ТС] | 12 | |||||
Теперь так:
0
|
Заблокирован
|
|
21.04.2015, 18:58 | 13 |
Ну соответсвенно x y z - из Direction, w = angle. т.е. кватернион это поворот относительно оси. Ось - direction. А поворот это угол наклона плоскости содержащей любую из остальных осей ЛСК и соответствующей ей плоскостью ГСК. И найти этот угол есть куча вариантов, если задана эта вторая ось.
Синус коснинус это на случай если нет функции нахождения угла между векторами. он находится как ArcTan2(abs(crossproduction()),dotproduction());
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
||||||
21.04.2015, 19:33 [ТС] | 14 | |||||
Есть.
Есть предположения, где косяк и почему результаты не сходятся?
0
|
Заблокирован
|
|
21.04.2015, 21:15 | 15 |
Естественно есть - там Origin задан (это второй вектор), а у нас он практически с потолка берется.
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
|||||||||||
21.04.2015, 21:27 [ТС] | 16 | ||||||||||
Вот полный код построения источника света в максе:
Наткнулся на интересный пример кода: http://xboxforums.create.msdn.com/forums/p/5385/28215.aspx Переписал под себя:
0
|
Заблокирован
|
|
21.04.2015, 21:28 | 17 |
То же самое, только за вектор Up берут ось Y (т.е - крен 0). у нас радиус вектор, т.е крен зависит от позиции.
0
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
||||||
21.04.2015, 21:31 [ТС] | 18 | |||||
Думаю стоит забить на макс как на эталон и подсовывать напрямую в нужный мне редактор.
Давай все заного, но теперь с учетом третьего вектора. Правильно ли я собрал матрицу?
0
|
Заблокирован
|
||||||
21.04.2015, 21:49 | 19 | |||||
![]() Решение
Абсолютно нет. Direction - У тебя ось Z - т.е первые три элемента третьего столбца. Первый и второй столбцы - те два вектора которые получались умножением. второй столбец up*direction.Normalized. первый - произведение второго и третьего. Позиция в четвертой строке а не в первой, т.е 4 строка position.X, position.Y, position.Z, 1
Добавлено через 6 минут Вот собственно говоря построение матрицы:
1
|
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
|
|
21.04.2015, 21:50 [ТС] | 20 |
В моем случае Target это Position, Eye это Direction, а Up это Origin ?
0
|
21.04.2015, 21:50 | |
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
21.04.2015, 21:50 |
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |