在BufferGeometry上识别光线投射交集的面

时间:2013-12-12 20:09:06

标签: javascript three.js

交集对象(由raycaster.intersectObject()返回)具有facefaceIndex属性。但是,如果相交的对象是BufferGeometry,则这些属性为null。另一方面,point属性按预期工作。

有没有办法确定BufferGeometry的哪个面被击中? faces中显然没有BufferGeometry数组,但知道(例如)定义匹配面的position属性中的点数索引将会很有帮助。

(我当然可以使用一些数学,因为我知道所有点的坐标,但那会破坏我在大几何上的表现)

1 个答案:

答案 0 :(得分:2)

实际上,相关代码可以在THREE.Mesh中找到;如果您查看Raycaster.js,您会发现THREE.Raycaster主要委托raycast THREE.Object3D方法({1}}。 Various subclasses of Object3D implement this method,包括Mesh

relevant lines from THREE.Mesh#raycast显示交叉点对象如下所示:

{
    distance: distance,
    point: intersectionPoint,
    indices: [ a, b, c ],
    face: null,
    faceIndex: null,
    object: this
}

其中abc是相交面上顶点的索引。

这意味着要获得包含相交面的顶点的索引,您可以执行以下操作:

var intersect = raycaster.intersectObject(scene);
if (intersect != null) {
    var faceIndices;
    if (intersect.face != null) {
        faceIndices = [ face.a, face.b, face.c ];
    } else if (intersect.indices != null) {
        faceIndices = intersect.indices
    }

    // do something with the faceIndices
}

three.js r68