У меня есть модель threejs в сцене, точка 0,0,0 которой находится в ее конце. Мне пришлось повернуть его так, чтобы его положение покоя находилось под нужным мне углом, и анимировать его в сцене, чтобы ни положение, ни поворот не были на 0,0,0. Кроме того, камера размещена и настроена так, чтобы смотреть на объект, поэтому ее положение и поворот были изменены.
Я хочу получить координаты мыши пользователя и просто повернуть модель вокруг своей центральной точки на мировой оси Y на определенное количество максимальных и минимальных градусов. Я знаю, как сопоставить координаты мыши с желаемым углом в градусах / радианах, но как мне сказать модели, что она должна вращаться?
Я пробовал model.rotation.y = [radians]
, и я предполагаю, что он вращается на основе той матрицы вращения, которая у него есть в настоящее время (или, по крайней мере, не так, как я ожидал). И если я сделаю rotateOnWorldAxis
, он повернется из точки 0,0,0, в которую он был импортирован, а не там, где я хочу, чтобы он был, и, кроме того, не является абсолютным числом градусов (т.е. он поворачивается на 30 градусов от того места, где он находится. в настоящее время каждое движение мыши, а не на 30 градусов по исходной точке мира.
Как мне заставить его повернуться в его центральной точке на определенный угол относительно мировой оси Y?
Положение модели - {_x: 0, _y: -0.3, _z: -2}
, ее вращение - {x: -2, y: 2.4, z: 0}
. Положение камеры - {x: 0, y: 0, z: 5}
, а вращение - {_x: 0.3926990816987242, _y: 0, _z: -0}
.
Текущий код:
const target = this.mouseTarget;
const mouseX = clientX - this.halfWidth; //halfWidth is half the screen width, client X is the mouse e.clientX
const mouseY = clientY - this.halfHeight;
target.x += (mouseX - target.x) * 0.02;
target.y += (-mouseY - target.y) * 0.02;
target.z = this.camera.position.z; // assuming the camera is located at ( 0, 0, z );
const maxRotDeg = 30;
const maxRot = this.degToRad(maxRotDeg);
const rotVal = this.mapValue(
target.x,
-this.halfWidth,
this.halfWidth,
-maxRot,
maxRot,
); //works to give me the radians that I want for rotation
//this.modelGroup.rotateOnWorldAxis(this.rotationAxisY, rotVal); //doesn't work
//this.modelGroup.lookAt(target); //doesn't work