我正在Three.js
创建一个项目,只要用户的鼠标与曲面细分的表面相交,它就会变为红色。我想将它扩展到整个sphere
,这意味着每当球体的一个点遇到面部的质心时,它就会变成红色。
这是用于计算intersected face
的质心的公式:
INTERSECTED = intersects[0];
var intGeometry = INTERSECTED.object.geometry;
var intFace = INTERSECTED.face;
var intVertices = intGeometry.vertices;
var v1 = intVertices[intFace.a],
v2 = intVertices[intFace.a],
v3 = intVertices[intFace.a];
var intPosition = new THREE.Vector3();
intPosition.x = (v1.x + v2.x + v3.x) / 3;
intPosition.y = (v1.y + v2.y + v3.y) / 3;
intPosition.z = 0;
这是用于sphere
的,它等于鼠标位置:
var pos = camera.position.clone().add(dir.multiplyScalar(distance));
mouseMesh.position.copy(pos);
我认为解决问题的最佳方法是获取网格的所有面,如果每个质心之间的距离小于sphere Radius
,则将其设为红色。但显然,我无法收集backgroundMesh
的所有面孔。
您知道如何解决这个问题吗?这是包含整个代码的JSFiddle。
提前感谢您的回复!
修改
使用可能的解决方案更新了JSFiddle。