Three.js 如何通过面索引查找面的顶点?

4
在我的Three.js项目中,我使用了一个缓冲几何体来构建一个网格。利用射线投射器(raycaster),我可以找到该网格上与一条特定射线相交的面,并得到该面的索引(index)。
那么,如何获取该面上各个顶点的位置呢?
2个回答

5

不必使用faceIndex,而是直接使用交点对象的face属性更为简便。您可以这样使用:

var vA = new THREE.Vector3();
var vB = new THREE.Vector3();
var vC = new THREE.Vector3();

var face = intersection.face;
var geometry = intersection.object.geometry;
var position = geometry.attributes.position;

vA.fromBufferAttribute( position, face.a );
vB.fromBufferAttribute( position, face.b );
vC.fromBufferAttribute( position, face.c );

如果您需要在世界坐标系中获取顶点,则需要将这三个向量与对象的世界矩阵相乘。 < p > three.js R102


vA.fromBufferAttribute()是什么? - zed87
这只是一种说法,意思是我必须使用face.a索引从位置数组中获取值吗? - zed87
这是THREE.Vector3的一个实例。让我澄清一下这篇文章。 - Mugen87

1

我曾经面临同样的挑战,试图从射线投射器相交的三角形面中获取顶点。被接受的答案对我不起作用,但是获取面属性是一个很好的起点。我使用了object.geometry.vertices索引来获取xyz向量信息。

var vertexElem = intersects[0].face.a;
var x1 = intersects[0].object.geometry.vertices[vertexElem].x;
var y1 = intersects[0].object.geometry.vertices[vertexElem].y;
var z1 = intersects[0].object.geometry.vertices[vertexElem].z;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接