Three.js - 如果sphere截取元素,则更改颜色

时间:2016-03-17 12:12:20

标签: javascript three.js

我正在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

0 个答案:

没有答案