Я новичок в трех .js и 3d-программировании в целом, так что это может показаться очень простым вопросом. В идеале я надеюсь, что ответ поможет мне понять основные принципы.
У меня есть объект, который должен "указывать" в другой точке (в этом случае простое начало), что легко можно сделать с помощью функции Object3D.lookAt(point)
. Это хорошо указывает на ось Z объекта в точке.
Я также хочу повернуть мой объект, называемый looker
, вокруг своей оси Z так, что его ось X указывает в целом на другой объект, refObj
. Я знаю, что ось X не может указывать непосредственно на refObj
, если только этот объект не имеет прямого угла с началом. Я хочу, чтобы ось X looker
лежала на плоскости, созданной origin
, refObj
и looker
, как показано ниже:
Самый простой способ сделать поворот - это изменить looker.rotation.z
, но я не знаю, как рассчитать, какое значение должно быть.
В общем, мне нужна расширенная версия функции lookAt
, которая берет вторую координату, к которой будет ориентирована ось X. Что-то вроде этого:
function lookAtAndOrient(objectToAdjust, pointToLookAt, pointToOrientXTowards)
{
// First we look at the pointToLookAt
objectToAdjust.lookAt(pointToLookAt);
// Then we rotate the object
objectToAdjust.rotation.z = ??;
}
Я создал jsFiddle с примером, описанным выше