Я уверен, что этот вопрос повторялся много раз, однако я не могу найти ответы на свои конкретные проблемы!
Я создаю игру в использовании html5 и THREE.js, и у меня есть камера, которая вращается с порядком эйлера "YXZ".
Это значит, что камера вращается вверх, вниз, влево и вправо, как голова. Как в первом взгляде лица.
При этом порядке эйлера свойство z в Camera.rotation не используется (всегда 0). x используется для указания высоты тона или широты в радианах, а y используется для обозначения долготы.
У меня есть ряд целей, перемещающихся вокруг пользователя сферически, при этом камера постоянно находится в центре этой сферы. Допустим, что сфера имеет радиус 1000.
Моя цель - рассчитать угол между тем, где находится камера LOOKING, и где находится цель.
Я написал этот код, который вычисляет угол между двумя векторами:
var A = new THREE.Vector3(1,0,0);
var B = new THREE.Vector3(0,1,0);
var theta = Math.acos( A.dot(B) / A.length() / B.length() );
// theta = PI/2;
У меня есть вектор цели (цели [0].position).
Дело в том, что я не могу найти способ получить вектор того, где выглядит камера.
Я посмотрел на Vector3.applyProjection и applyEuler методы, и играл вокруг, но все еще не могу получить хороших результатов.
Я считаю, что сначала нужно изменить порядок эйлеров на "XYZ" до того, как будут сделаны какие-либо прогнозы? Я пробовал, и я не уверен, как это сделать, документация довольно трудно понять.
Скажите, смотрит ли камера прямо вправо, тогда мне нужно получить вектор, который находится на расстоянии RADIUS от центра в направлении текущего вращения.
Итак, у меня получится 2 вектора, которые я могу делать вычислениями на!
Благодарим вас за продвинутый!