1 | |||||||||||||||||||||
Направить объект по двум векторам09.03.2018, 13:52. Показов 5732. Ответов 14
Метки нет (Все метки)
Привет всем!
Столкнулся с такой проблемой, есть информация из файла о двух векторах направления объекта. сперва необходимо направить объект по первому вектору, а затем к той же трансформации добавить направление объекта по второму вектору. для наглядности
далее мне необходимо установить вектор Up, объект должен оказаться направленным по оси Х в результате
если у нас векторы v1 и v2 ортогональны, работает вот эта штука правильно, ну и по документации сказано что работает только с ортогональными
Но вот как все таки задать такое последовательное направление, уже голову сломал всю себе... заранее благодарен
0
|
09.03.2018, 13:52 | |
Ответы с готовыми решениями:
14
По двум функциям (векторам) построить функцию Разложение вектора по двум другим векторам По заданным двум векторам построить две функции Найти вектор, ортогональный двум данным векторам |
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
09.03.2018, 15:31 | 2 |
Сообщение было отмечено Arcor как решение
Решение
Transform.LookAt
Добавлено через 54 секунды Читай справку, там можно указать вектор up
0
|
09.03.2018, 15:38 [ТС] | 3 |
Здравствуйте,
я вот тоже тыкался с этой функцией, указывая текущую трансформацию объекта и вектор up, все равно объект поворачивается после предыдущего поворота неправильно. еще пробовал с FromToRotation() все четко отрабывается только при первой трансформации, если уже применить на трансформированную, то ... у меня логика рушится блиин уже. Не исключено, что у меня в корне ошибка в понимании ...
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
09.03.2018, 16:06 | 4 |
Сообщение было отмечено Arcor как решение
Решение
Какого предыдущего? Там указать точку и вектор up только.
0
|
09.03.2018, 16:47 [ТС] | 5 | ||||||||||
Смотрите что мне нужно:
1 - поворачиваю объект по направлению forward, указываю вектор. 2 - есть второй вектор направления, его нужно как-то установить так, чтобы он повернул мне весь объект целиком, установя этот самый вектор как-бы в позицию Up. если вот к примеру из первого поста, если я повернул объект forward ему задал Vector3(1, 1, 0); затем вторым шагом я беру второй вектор пусть бeдет Vector3(0, 1, 0); и мне надо, чтобы вектор up стал по нравправлению указанного вектора, результат такого поворота получится: 1 - 1, 1, 0 - вектор в плоскости x-y, под 45 градусов. 2 - 0, 1, 0 - вектор совпадает четко с осью y, далее нужно объекту сказать, чтобы вектор Up объкта стал 0, 1, 0, но предыдущие повороты сохранились. Таким образом в результате, вектор под 45 градусов станет по up 0, 1, 0, а по forward станет автоматически 1, 0, 0 Добавлено через 24 минуты если же второй вектор будет же к примеру 0, 1, 1, т.е лежать в y-z плоскости, его так же нужно будет установить в направлении up вектора, тем самым повернуть объект с его предыдущими поворотами и прочим. вроде логично делаю первый поворот
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
09.03.2018, 17:29 | 6 |
Сообщение было отмечено Arcor как решение
Решение
transform.LookAt( transform.position+vector_forward, vector_up);
Добавлено через 1 минуту Я же сказал прочесть справку
0
|
09.03.2018, 17:47 [ТС] | 7 | |||||
так... читаю... и там стоит
Код
The up vector of the rotation will only match the worldUp vector if the forward direction is perpendicular to worldUp.
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
09.03.2018, 18:33 | 8 |
Сообщение было отмечено Arcor как решение
Решение
Тогда ставь forward, считай угол от up до вектор2 и вращай по оси Vector3.Cross(up, вектор2)
0
|
09.03.2018, 19:07 [ТС] | 9 |
Спасибо за ответы))) Вот я как раз и хотел убежать от углов)) если у меня будет же вектор со всеми 3 компонентами, то там и другой угол учитывать надо же будет еще, иначе там путаницы будет больше чем кода... чую я) Хотел все векторами решить, раз они уже есть, но видать не все так просто.. уже концентрации нету думать.. блиин.. мож за выходные надумается чего)
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
09.03.2018, 19:54 | 10 |
А что там считать? Угол - float angle = Vector3.Angle(v1, transform.up)
Ось поворота - Vector3 axis = Vector3.Cross(transform.up, v1) Направление - float dir = (Vector3.Dot(transform.right, v1)<0f ? -1f : 1f) И делай transform.Rotate(axis, angle*dir, Space.World); Добавлено через 1 минуту Arcor, четыре строки на поворот. Добавлено через 43 секунды А как у тебя up и forward не перпендикулярны? Ты наркоман? Добавлено через 52 секунды Ты в принципе не можешь такое получить, так все оси перпендикулярны друг другу.
0
|
09.03.2018, 20:16 [ТС] | 11 |
тот код то понятно...
ога))) ... а к чему тогда в описании к функции, которую ты мне так втирал, работает только если оси перпендикулярны, я наркоман?) и к чему такие наезды пошлые ? дали прогу рабочую без исходников и файлы конфигурации к проге.... надо было сперва понять что в файлах за инфа методом тыка и изменения значений я пришел к выводу, что там 2 вектора именно так ведут себя, как я описал. А потом написать прогу, вот на позиционировании и застряло все дело, 3 дня игрался с файлами конфигов, пытаясь понять смысл))))))) вот я тоже долго не мог понять в чем смысл поведения тех сранных векторов, которые мне установить нужно... но там идет одна система - объект, а вторая - наблюдатель. вот надо поставить относительно наблюдателя, сперва по forward затем по up, ставя по forward сбивается естественно Up и наоборот
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
09.03.2018, 21:25 | 12 |
Все оси всегда перпендикулярны. В любой системе координат. Иначе не бывает, поэтому и уточнил про наркомана. Если хочешь выставить два НЕ перпендикулярных вектора по осям одновременно - это надо писать свою неэвклидову систему координат )))
0
|
09.03.2018, 23:01 [ТС] | 13 |
да не про оси речь то идет, оси то перпендикулярны у системы координат, емае.. а про направление выравнивания объекта))))))))) с Юнитивским жаргоном уменя пока еще совсем никак, так как неделю всего лишь занимаюсь вообще юнити и вообще 3д)))) Ничего, разберемся.. была бы закуска хорошая)))))
у меня у самого была проблема с понимаеним того, что мне вообще нужно сделать, а вот ту вот текстом размусолил, и многое до самого дошло))) Добавлено через 59 минут походу разобрался)))))) только пиво открыл и... что-то похожее начало вырисовываться))) на работе надо было открыть пивасик))) как и сказал уже... Юнити еще новинка для меня... все дело было тут вот в Space.World, относительно чего-то смотреть надо было, а не относительно себя же... ээххххххХХХхХХХХ, спаисбо Cr0c за наводки!
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
10.03.2018, 00:13 | 14 |
Независимо от систем координат оси ВСЕГДА перпендикулярны.
0
|
10.03.2018, 00:33 [ТС] | 15 |
а я что, спорил?)))))) мой вопрос был не в том, что оси не перпендикулярны, ты мне начал втирать про свою LookAt..)) а вопрос был, как повернуть объект последовательно)))
ну так я не хотел этого)))))))) ты мне это втирал, повторюсь еще раз))) мой вопрос был изначально правильным) но я рад, что и ты понял, что мне надо было))))
0
|
10.03.2018, 00:33 | |
10.03.2018, 00:33 | |
Помогаю со студенческими работами здесь
15
Базис и разложение вектора по двум данным векторам Напишите шаблонную функцию, которая по двум однотипным указателям проверяет, указывают ли они на один объект Поиск значения по двум двум параметрам (вертикали и горизонтали) Направить трафик через Wi-Fi Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |