Кватернион. Как определить угол вращения.
В общем есть у меня вектор который совпадает с осью игрек и есть вектор к которому я хочу повернуть некоторое количество точек чьи координаты при направляющем векторе по оси игрек мне известны.
PHP код:
|
Ответ: Кватернион. Как определить угол вращения.
А это не подойдет? http://docs.unity3d.com/Documentatio...oRotation.html Умножить все точки на него.
Ну и вращение происходит относительно нуля координат. Попробуй вычесть центр вращения из точки, повернуть, потом прибавить центр вращения. |
Ответ: Кватернион. Как определить угол вращения.
Подошло идеально. Выходит зря википедию по кватернионам читал :))
|
Ответ: Кватернион. Как определить угол вращения.
Вложений: 1
Ну и собственно то зачем мне это понадобилось.
Что-то типа плоскости прикидывающейся планетой у которой плавно растет детализация при приближении. в архиве сам проект и собранное приложение. |
Ответ: Кватернион. Как определить угол вращения.
Интересно, перенести бы этот алгоритм в шейдер, жрет многовато сейчас. 20 ms на обновление. Правда с нормалями надо что-то заранее сделать... кубмэпу или что-то еще... Нойз бы тоже запечь...
|
Ответ: Кватернион. Как определить угол вращения.
Так этож перестроение поверхности идет каждый кадр, а в реальности оно понадобится редко, не каждую секунду точно. И там же как я понимаю куча лишних операций в кватернионе, оно ж собирает матрицу из него для каждой вершины отдельно, плюс сам алгоритм шума довольно жрущий. По идее все это можно упростить по вычислениям проецируя каждую точку на куб, где на каждую грань идет своя сохраненная карта высот и прочая полезная информация типа тестурных координат.
А пихать это в шейдер зря наверно. Усложнит на порядок же внесение модификаций в алгоритм генерации поверхности. |
Ответ: Кватернион. Как определить угол вращения.
С матрицей не быстрее, У кватерниона свое умножение на вектор нормальное. Можешь сравнить
PHP код:
|
Ответ: Кватернион. Как определить угол вращения.
А я думал оно вот эту хреновину собирает чтобы повернуть:
Выражение матрицы поворота через кватернион Если задан кватернион q = (w,x,y,z), то соответствующая матрица поворота имеет вид: |
Ответ: Кватернион. Как определить угол вращения.
Где-то около трех миллисекунд сокращает:
PHP код:
Кстати еще можно это сократить PHP код:
PHP код:
|
Ответ: Кватернион. Как определить угол вращения.
pax, а вот захотел я допустим к этой хрени вращение сделать.
Vector3 angle = gameObject.transform.eulerAngles; angle.y+=0.1f; gameObject.transform.eulerAngles = angle; вот так этот планетоид вращаться начинает Как мне потом позицию камеры перевестив локальные координаты? Vector3 campos = gameObject.transform.rotation * cam.transform.position ; Vector3 campos = gameObject.transform.localToWorldMatrix * cam.transform.position ; Vector3 campos = gameObject.transform.worldToLocalMatrix * cam.transform.position ; Ничто из этого не сработало. Может я вращаю не правильно... Как? |
Ответ: Кватернион. Как определить угол вращения.
Так наверное
Vector3 campos = transform.worldToLocalMatrix.MultiplyPoint(cam.tra nsform.position); либо так Vector3 campos = transform.InverseTransformPoint(cam.transform.posi tion); |
Ответ: Кватернион. Как определить угол вращения.
Вложений: 1
Сочинил что-то типа кубомапы и вроде бы побыстрей стало. |
Ответ: Кватернион. Как определить угол вращения.
а исполнимый файл?
|
Ответ: Кватернион. Как определить угол вращения.
Цитата:
вот файл |
Ответ: Кватернион. Как определить угол вращения.
Вложений: 1
архив с ехе 10 мб Добавил твердости планете и систему частиц кое-как прикидывающуюся облачками. Кто-нить делал вменяемый моуслук на поверхности сферы? Чтобы камера вела себя как при обычном моуслуке но считала что ось(0,1,0) была направлена от центра сферы к позиции камеры. Как это сделать? PHP код:
|
Часовой пояс GMT +4, время: 10:57. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot