Hallo Leute
Ich würde gerne wissen, wie ich die 3D-Koordinaten von einer Kollisionspunktmaus 2d erhalten kann
von diesem Code
function onDocumentMouseDown( event ) {
event.preventDefault();
mouse2d.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse2d.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
mouse2d.z = 1;
var r = new THREE.Ray();
r.origin.copy( mouse2d );
var matrix = camera.matrixWorld.clone();
matrix.multiplySelf( THREE.Matrix4.makeInvert( camera.projectionMatrix ) );
matrix.multiplyVector3( r.origin );
r.direction = r.origin.clone().subSelf( camera.position );
var c = THREE.Collisions.rayCastNearest( r );
if( c ) {
//////////////////HERE GET THE 3D POINT COORDINATES////////////////////////
c.mesh.materials[ 0 ].color.setHex( 0xaa0000 );
} else {
plane.materials[0].color.setHex( 0xF9EFD7 );
}
};
Das Kollisionsobjekt ist eine Ebene, die ich als Boden verwende, und ich möchte die 3D-Koordinaten des Kollisionspunkts kennen, um die Position eines Objekts festzulegen.
Danke im Voraus
Egal, ich habe es gefunden
Wie bist du dazu gekommen?
Ich habe dieses Problem selbst. Ich bekomme nicht einmal einen Treffer vom Collider. Wie haben Sie es gelöst?
@inear : hast du es mit der Ray
Klasse versucht?
Vielen Dank! Das funktioniert wie ein Zauber. Die point-Eigenschaft ist genau das, was ich brauchte.
var vector = mouse2D;
projector.unprojectVector( vector, camera );
var r = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var c = r.intersectObject(wave)
if( c.length > 0 ) {
sphere.position = c[0].point;
}
var getZvalue = function (e)
{
var rect = e.target.getBoundingClientRect();
// 2D
var mouseX = e.clientX - rect.left;
var mouseY = e.clientY - rect.top;
// 3D
SCREEN_WIDTH = window.innerWidth;
SCREEN_HEIGHT= window.innerHeight;
var mouse = new THREE.Vector2();
mouse.x = (mouseX/SCREEN_WIDTH) *2 - 1;
mouse.y = -(mouseY/SCREEN_HEIGHT) *2 + 1;
// Raycaster
if (TerraDroneViewer.raycaster == null)
{
TerraDroneViewer.raycaster = new THREE.Raycaster();
}
TerraDroneViewer.raycaster.setFromCamera( mouse, TerraDroneViewer.camera );
var intersects = TerraDroneViewer.raycaster.intersectObjects( TerraDroneViewer.maps.children );
console.log("raycast=" + intersects.length);
if (intersects.length != 0)
{
var x = mouse.x * 10;
var y = mouse.y * 10;
console.log("x = " + intersects[0].point.x + " y = " + intersects[0].point.y);
var z = parseFloat(intersects[0].point.z) * 10;
return {
x: x,
y: y,
z: z
}
}
return null;
};