我有一组这样排列的球体:
每个球体彼此等距。为此我的代码是:
geometry = new THREE.SphereGeometry(1.2);
material = new THREE.MeshPhongMaterial({
color: 0xe0e0e0
})
for (var zPos = -120, i = 0; zPos <= 120; zPos += 7, i++) {
arr[i] = [];
for (var xPos = -120, j = 0; xPos <= 120; xPos += 7, j++) {
arr[i][j] = "(" + i + "," + j + ")";
sphere = new THREE.Mesh(geometry, material);
sphere.position.set(xPos, 0, zPos);
sphere.name = i + "-" + j;
count++;
sphere.receiveShadow = true;
sphereMesh.add(sphere);
}
rows++;
}
scene.add(sphereMesh);
此处sphereMesh是一个组。
现在我的问题是,当我给出一个特定的位置作为输入时,应该选择接近某个半径的位置的球体,并且它们应该改变它们的颜色。
如何找到该位置附近的球体?
答案 0 :(得分:1)
只测量 givenPoint 和 sphere 之间的距离,并测试它与任意限制之间的距离。 只是一个例子,假设 givenPoint 是THREE.Vector3而 sphere 是THREE.Mesh
var limit = 2;
var distance = Math.sqrt(Math.pow(sphere.position.x - givenPoint.x, 2) + Math.pow(sphere.position.y - givenPoint.y));
if (distance > limit)
{
// is out
}
else
{
// is in
}
然后你可以添加几个断点,以便说明 givenPoint 附近有一个球体,或者更好地规范它并得到一个比例:
var normalized = 1 - distance / limit