我创建了一个由多个三角形面组成的平面(THREE.js,CanvasRenderer)。当我将鼠标指针悬停在它们上面时,我希望面部随机改变颜色。当面的所有顶点都在z = 0时,它可以正常工作:
http://jsfiddle.net/koweiny/FT4uS/
但是当我将面设置为任何其他值时,假设z = -10,它表现得很疯狂,好像表面现在是z = 0处不可见表面的反射:
http://jsfiddle.net/koweiny/FT4uS/2/
代码中唯一的变化是变量节点的第3个分量,现在对于所有顶点都是-10:
var node = new THREE.Vector3(x, y, -10);
而不是
var node = new THREE.Vector3(x, y, 0);
谁能告诉我为什么会这样?
答案 0 :(得分:1)
Ray.intersectObjects()
需要面部质心。
geometry.computeCentroids();
小提琴:http://jsfiddle.net/FT4uS/5/
three.js r.53
答案 1 :(得分:0)
这让我想起了使用intersectObjects的一些奇怪的行为。 我的猜测是,如果你有一个远离场景中心的物体,那个boudingSphere很大,所以当我将鼠标移到它旁边的一个空白区域时,这个功能让我接下来仍然是对象。
因此,为了防止我使这个函数确定,它只是将对象中的Point与boundingBox进行比较。
_this.checkIfPointMatchBox = function( set ) {
if (set.point.x < set.object.geometry.boundingBox.min.x || set.point.x > set.object.geometry.boundingBox.max.x) {
return false;
}
if (set.point.y < set.object.geometry.boundingBox.min.y || set.point.y > set.object.geometry.boundingBox.max.y) {
return false;
}
if (set.point.z < set.object.geometry.boundingBox.min.z || set.point.z > set.object.geometry.boundingBox.max.z) {
return false;
}
return true;
}