J'essaie de déterminer l'emplacement (coordonnées x, y, z) d'un objet (un BoxGeometry) dans le monde par rapport à l'écran (tronc) et pas le monde. La méthode frustum.intersectsObject (...) renvoie simplement un booléen, je veux déterminer quel quadrant ([-x, y], [x, y], [x, -y], [-x, -y]) une boîte est relatif à la caméra (les lignes rouges de la capture d'écran ci-dessous suivent la caméra et non la scène). À l'heure actuelle, tout fonctionne tant que la caméra n'est pas tournée (room.children[i].position.x
) car alors la caméra et le monde ont les mêmes coordonnées mais au moment où je fais tourner la caméra, cela ne fonctionne pas.Déterminer le x, y visible d'un objet dans la scène
Je pense que les choses apparaissent dans if (frustum.intersectsObject(room.children[i])) {
qui ne devrait pas l'être. (Voir image ci-dessous)
Je suis nouveau sur three.js, donc il y a probablement un moyen facile de le faire que je ne suis pas arrivé à travers. Si, pour une raison quelconque, il n'y en a pas, quelle serait la manière la plus simple de mettre en œuvre une telle chose? Merci!!
function onDocumentKeyDown(event) {
event.preventDefault();
var frustum = new THREE.Frustum();
frustum.setFromMatrix(new THREE.Matrix4().multiply(camera.projectionMatrix));
for (var i = 0; i < room.children.length; i++) {
if (frustum.intersectsObject(room.children[i])) {
var XYZ=new THREE.Vector4();
XYZ.copy(room.children[i].position).applyMatrix4(camera.matrixWorldInverse);
console.log(i, 'left', frustum.intersectsObject(room.children[i]), XYZ.x,XYZ.y,XYZ.z,XYZ.w, room.children[i].material.emissive.getHex());
if (XYZ.x < 0 && XYZ.y > 0 && (event.keyCode === 103 || event.keyCode === 13)) {
if (room.children[i].material.emissive.getHex() !== 255) {
$('#score').text(score++);
room.children[i].material.emissive.setHex(0x00ff00);
console.log(frustum);
console.log(i, 'WHAT ARE THE BOUNDING BOX COORDINATES OF THIS BOX????');
}
}
}
}
}
Voulez-vous dire que vous voulez les coordonnées espace-caméra d'un point d'espace-monde? 'vector.copy (point) .applyMatrix4 (camera.matrixWorldInverse);' – WestLangley
Fondamentalement ce que je veux est de déterminer quel quadrant ([-x, y], [x, y], [x, -y], [- x , -y]) la boîte est par rapport à la caméra (les lignes rouges suivent la caméra et non la scène). – SomeoneElse