交集对象(由raycaster.intersectObject()
返回)具有face
和faceIndex
属性。但是,如果相交的对象是BufferGeometry
,则这些属性为null。另一方面,point
属性按预期工作。
有没有办法确定BufferGeometry
的哪个面被击中? faces
中显然没有BufferGeometry
数组,但知道(例如)定义匹配面的position
属性中的点数索引将会很有帮助。
(我当然可以使用一些数学,因为我知道所有点的坐标,但那会破坏我在大几何上的表现)
答案 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
}
其中a
,b
和c
是相交面上顶点的索引。
这意味着要获得包含相交面的顶点的索引,您可以执行以下操作:
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