Raycaster 射线检测器

利用从相机发出到鼠标的射线来检测:在这条射线 Ray 上有没经过物体. 构造函数中的near默认是0, far默认为无穷远, 也即默认构造出一条射线; 当你对它们设置一个具体值时, 则为一条线段, 用来检测在这条射线上有没经过物体, 可以减少计算量. 利用方法 intersectObjects 可得到一个经过的所有物体的数组, 其中的参数 recursive 可以设定是否检测被包含的子对象, 默认为false, 如果为true, 则连同被包含在里面也经过射线的Object3D一起返回.

function Raycaster( origin, direction, near, far ) { } var mouse = new THREE.Vector2(-1, -1), intersected; var rayCaster = new THREE.Raycaster(); document.addEventListener('mousemove', onDocumentMouseMove); function onDocumentMouseMove(e){ e.preventDefault(); mouse.x = e.clientX / window.innerWidth * 2 - 1; mouse.y = -e.clientY / window.innerHeight * 2 + 1; } animate(); function animate(){ rayCaster.setFromCamera(mouse, camera); var intersects = rayCaster.intersectObjects(scene.children); if(intersects.length > 0){ if(intersected != intersects[0].object){ if(intersected) intersected.material.color.setHex(intersected.currentHex); intersected = intersects[0].object; intersected.currentHex = intersected.material.color.getHex(); intersected.material.color.setHex(0xff0000); } } else{ if(intersected) intersected.material.color.setHex(intersected.currentHex); intersected = null; } renderer.render(scene, camera); requestAnimationFrame(animate); }

Constructor

origin Vector3 射线原点
direction Vector3 射线方向
near Float 最近测试距离
far Float 最远测试距离

Attributes

ray : Ray

Default value : new Ray( origin, direction )
Description : 用于射线投射的射线.

near : Float

Default value : 0
Description : 射线投射的最近测试距离, 距离少于此值内的物体, 就不用于检测.

far : Float

Default value : Infinity
Description : 射线投射的最远测试距离, 距离大于此值内的物体, 就不用于检测. 它必须大于near.

params : Object

Default value : { Mesh: {}, Line: {}, LOD: {}, Points: { threshold: 1 }, Sprite: {} }
Description : 参数.

linePrecision : Float

Default value : 1
Description : 和线条对象Line相交时的精确度.

Methods

intersectObject( object, recursive, optionalTarget ) : Array
object Object3D 检测与射线相交的对象.
recursive Boolean 是否检测被包含的子对象
optionalTarget Array 可选目标

检测射线与物体的相交. 交叉点返回按距离排序, 最接近的为第一个. 返回一个交叉点对象数组.

intersectObjects( objects, recursive, optionalTarget ) : Array
object Object3D 检测与射线相交的对象.
recursive Boolean 是否检测被包含的子对象
optionalTarget Array 可选目标

检测射线与物体的相交. 交叉点返回按距离排序, 最接近的为第一个. 返回一个交叉点对象数组.

set( origin, direction ) : null
origin Vector3 射线原点
direction Vector3 射线方向

更新射线的原点与方向.

setFromCamera( coords, camera ) : null
coords Vector2 在标准化设备坐标中鼠标的2D坐标: X和Y分量应在-1和1之间.
camera Camera 发出射线的相机

从相机发出检测的射线.