1

我创建了一个由多个三角形面组成的平面(THREE.js,CanvasRenderer)。当我将鼠标指针悬停在它们上面时,我希望它们随机改变它们的颜色。当面的所有顶点都在 z = 0 时,它工作正常:

http://jsfiddle.net/koweiny/FT4uS/

但是当我将面设置为任何其他值时,假设 z = -10,它的行为方式非常疯狂,就好像表面现在是 z = 0 处不可见表面的反射:

http://jsfiddle.net/koweiny/FT4uS/2/

代码中唯一的变化是变量节点的第三个组件,现在所有顶点都为 -10:

var node = new THREE.Vector3(x, y, -10);

代替

var node = new THREE.Vector3(x, y, 0);

谁能告诉我为什么会这样?

4

2 回答 2

1

Ray.intersectObjects()需要面形心。

geometry.computeCentroids();

小提琴:http: //jsfiddle.net/FT4uS/5/

三.js r.53

于 2012-12-20T18:34:09.390 回答
0

这让我想起了 intersectObjects 的一些奇怪行为。我的猜测是,如果你有一个远离场景中心的物体,boudingSphere 很大,所以当我将鼠标移到它旁边的空白处时,这个函数仍然返回我下一个物体。

所以为了防止我确定这个函数,它只是将对象中的点与边界框进行比较。

_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;
}
于 2012-12-22T03:25:29.810 回答