J'ai une sphère et je dois convertir un clic de souris à la latitude et la longitudeConvert clic de souris pour la latitude et la longitude sur la sphère pivotée
Tout fonctionne bien tant que la sphère ayant pas de rotation, mais si elle a une rotation - Je reçois des résultats erronés
Voici mon code:
var mouse = new THREE.Vector2();
mouse.x = (event.pageX/window.innerWidth) * 2 - 1;
mouse.y = -(event.pageY/window.innerHeight) * 2 + 1;
var raycaster = new THREE.Raycaster();
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObject(EarthSphere);
if (intersects.length!=1) return;
var pointOnSphere = new THREE.Vector3();
pointOnSphere.x = intersects[0].point.x;
pointOnSphere.y = intersects[0].point.y;
pointOnSphere.z = intersects[0].point.z;
var EarthRadius = 20;
var lat = 90 - (Math.acos(pointOnSphere.y/EarthRadius)) * 180/Math.PI;
var lon = ((90 + (Math.atan2(pointOnSphere.x , pointOnSphere.z)) * 180/Math.PI) % 360) - 180;
Je Güssing que je dois manipuler en quelque sorte le pointOnSphere basé sur Earthsphere, des idées?
EDITED
earth.updateMatrixWorld (true); pointOnSphere = earth.localToWorld (pointOnSphere.clone());
Je pensais que quelque chose comme ce qui suit fonctionnerait:
EarthSphere.updateMatrixWorld(true);
pointOnSphere = EarthSphere.localToWorld(pointOnSphere.clone());
Mais il ne fonctionne pas ..
Avez-vous une matrice de rotation? – Rabbid76
EarthSphere est un maillage, donc EarthSphere.matrix? – user1732451