У меня есть сфера с текстурой земли, использующая three.js.Хотя Земля вращается вокруг оси Y самостоятельно (по горизонтали), я не уверен, как повернуть сферу по ее вертикальной оси X в зависимости от положения мыши.Земля должна показывать северный полюс, когда мышь расположена в верхней части окна браузера, и южный полюс, когда мышь расположена в нижней части экрана.Он должен вращаться, чтобы показать землю между полюсами в зависимости от положения мыши по вертикали, когда мышь перемещается по вертикали в окне браузера.
Как можно выполнить такой тип вращения?
Этот код устанавливаетдо сцены three.js, но математика вращения не совсем верна:
<html>
<head>
<title>Earth Rotation</title>
<style>
body { margin: 0; }
canvas { width: 100%; height: 100% }
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/96/three.js"></script>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
var geometry = new THREE.SphereGeometry(1, 100, 100);
var material = new THREE.MeshPhongMaterial();
var earthMesh = new THREE.Mesh(geometry, material);
material.map = THREE.ImageUtils.loadTexture('images/earth.jpg');
var light = new THREE.AmbientLight( 0xcccccc );
scene.add(light);
scene.add(earthMesh);
camera.position.z = 1.5;
document.addEventListener('mousemove', function(event){
if(event.clientY < window.innerHeight / 2) {
earthMesh.rotation.x = ((window.innerHeight / 2) - (event.clientY * .0001));
} else if(event.clientY > window.innerHeight / 2) {
earthMesh.rotation.x = ((window.innerHeight / 2) + (event.clientY * .0001));
}
}, false)
var animate = function () {
requestAnimationFrame( animate );
earthMesh.rotation.y -= 0.0005;
renderer.render( scene, camera );
};
animate();
</script>
</body>
</html>