Bewahrer: three.js object picking

Beitrag lesen

Falls ich den Fehler dann hoffentlich doch noch entdecke, geht's hier im Thread weiter, damit die Nachwelt möglicherweise davon profitieren kann ^^

Problem ist gelöst. Für alle, die es interessiert, oder die ein ähnliches Problem haben:

Ich hatte in meiner Szene (scene) ein einziges 3DObjekt (model), ich wollte überprüfen, ob ich mit einem Mausklick dieses Objekt treffe. Dafür ist der Code:

var intersects = raycaster.intersectObjects(scene.children);

Verantwortlich. Logisch gesehen habe ich keinen Fehler, das Problem ist, dass intern mein 3DObjekt (model) weitere Children hat - nämlich eines vom Typ THREE.Mesh. Dieses THREE.Mesh verfügt über die Geometriedaten, das 3DObjekt (model) verfügt nicht über sie. Und da die Funktion intersectObjects() nicht rekursiv arbeitet, hat sie für scene.children nur bei Model nach Geometriedaten gesucht - dort wurden natürlich keine intersects gefunden. Fügt man ein true hintendran, arbeitet die Funktion rekursiv und schon findet der Code entsprechend richtig auch intersects.

var intersects = raycaster.intersectObjects(scene.children,true);

Eine Alternative wäre z.B:

var intersects = raycaster.intersectObjects(scene.children[0].children);

Mit diesem Code, spreche ich das Child-Element von meiner Szene an, nämlich mein 3DObjekt (model) und anschließend dessen einziges Child-Element - das THREE.Mesh. Und dann werden Kollisionen auch richtig erkannt.

Ich hoffe das nützt jemandem etwas.