![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 97
|
Всем доброго времени суток!
Вопрос в следующем: как сделать так, чтобы объект в пространстве (3D) постоянно смотрел на камеру, но только одной стороной. То есть, в точке А есть плоский объект и есть камера в точке В. Если плоский объект расположен вдоль оси Х, то все легко: var angleX:Number = Math.atan2(_object.z - _camera.z, _object.y - _camera.y) * 180 / Math.PI; _object.rotationX = angleX; Но нужно сделать так, чтобы это работало вне зависимости от того, как расположен плоский объект. То есть, он может быть расположен не четко вдоль оси Х. Как я понимаю, тут нужно проделать аналогичные манипуляции с другими углами, но в связи с отсутствием каких либо знаний в тригонометрии, я не могу до этого додуматься. |
|
|||||
|
Тут не столько тригонометрия, сколько линейная алгебра/аналитическая геометрия и кватернионы (если использовать только матрицы без кватернионов некоторые операции с углами будут проблематичны)
Если я правильно понял задачу (мутно написано, рисунок нужен): - провести вектор из плоского объекта в камеру - найти минимальный угол между нормалью к плоскому объекту этим вектором - повернуть объект вокруг оси, перпендикулярной обоим этим векторам на этот угол Теорию читать на gamedev.ru Последний раз редактировалось expl; 01.08.2012 в 16:06. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 97
|
ну вроде бы правильно понял, только, наверное, "между нормалью к плоскому объекту И этим вектором".
Проблема в том, как найти эту самую ось, перпендикулярную этим векторам. Ведь эта плоскость явно не совпадет с X, Y или Z. На теорию времени нет... =) Насчет нормали к плоскости, так она определяется? Последний раз редактировалось Jitakuzu; 01.08.2012 в 16:25. |
|
|||||
|
Цитата:
А вот повернуть вокруг произвольной оси - это уже веселее. Но можно алгоритм найти на том же gamedev.ru. Единственное, там 2 способа - с помощью матриц и кватернионов - нужно использовать, тот, который с кватернионами. Цитата:
(направление нормали будет зависеть от порядка перемножения векторов) Вам же нужно чтобы эта нормаль на камеру смотрела? |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:09. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|