Трекбол-подобные элементы управления в Three. js - PullRequest
1 голос
/ 22 апреля 2020

Я довольно долго делал 3D-игру и остановился на сложной проблеме с элементами управления. Я использую пользовательские элементы управления указателем и хочу, чтобы вращение велось как три. js TrackballControls.

Мой код:

function animate() {
    requestAnimationFrame(animate);
    camera.position.x = (Math.sin(euler.y) - Math.sin(euler.x)) * zoomValue + lastPlayerX;
    camera.position.z = (Math.cos(euler.y) - Math.sin(euler.x)) * zoomValue + lastPlayerZ;
    camera.position.y = -Math.sin(euler.x) * zoomValue + lastPlayerY;
    composer.render();
}
animate();

lastPlayerX, lastPlayerY и lastPlayerZ являются осями положения игрока (которые являются целью, вокруг которой должна вращаться камера), euler - это THREE.Euler, представляющий поворот камеры, и zoomValue - это то, как далеко камера должна уменьшать масштаб.

Основная загадка - это метод расчета, так что я должен сделать, чтобы камера вращалась вокруг игрока? (только вокруг оси X и Y).

1 Ответ

0 голосов
/ 22 апреля 2020

Я только что понял:

Правильная формула была

function animate() {
    requestAnimationFrame(animate);
    camera.position.x = Math.sin(euler.y) * Math.sin(euler.x + Math.PI / 2) * zoomValue + lastPlayerX;
    camera.position.z = Math.cos(euler.y) * Math.sin(euler.x + Math.PI / 2) * zoomValue + lastPlayerZ;
    camera.position.y = -Math.sin(euler.x) * zoomValue + lastPlayerY;
    composer.render();
}
animate(); 

Надеюсь, это кому-нибудь поможет!

...