2012-12-20 28 views
1

我創建了一個由多個三角形面組成的平面曲面(THREE.js,CanvasRenderer)。當我將鼠標指針懸停在他們身上時,我希望臉部隨機更改其顏色。當臉部的所有頂點都在z = 0,它工作正常:當臉部頂點不位於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); 

誰能告訴我,爲什麼出現這種情況?

回答

0

這讓我想起了與intersectObjects一些奇怪的behavor的。 我的猜測是,如果你有一個對象遠離場景中心,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; 
}