You do not need to have any objects in your scene to do this.
You already know the camera position.
Using vector.unproject( camera )
you can get a ray pointing in the direction you want.
You just need to extend that ray, from the camera position, until the z-coordinate of the tip of the ray is zero.
You can do that like so:
var vec = new THREE.Vector3(); // create once and reuse
var pos = new THREE.Vector3(); // create once and reuse
vec.set(
( event.clientX / window.innerWidth ) * 2 - 1,
- ( event.clientY / window.innerHeight ) * 2 + 1,
0.5 );
vec.unproject( camera );
vec.sub( camera.position ).normalize();
var distance = - camera.position.z / vec.z;
pos.copy( camera.position ).add( vec.multiplyScalar( distance ) );
The variable pos
is the position of the point in 3D space, "under the mouse", and in the plane z=0
.
EDIT: If you need the point "under the mouse" and in the plane z = targetZ
, replace the distance computation with:
var distance = ( targetZ - camera.position.z ) / vec.z;
three.js r.98
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…