2012-08-30 36 views
1

爲什麼THREE.Vector3.sub在此方案中返回(0,0,0)?three.js:THREE.Vector3.sub()異常行爲

p0 = new THREE.Vector3(0, 100, 50); 
p1 = new THREE.Vector3(0, 50, 100); 
dummy = new THREE.Vector3(0,0,0); 
p1_relative_to_p0 = dummy.sub(p1, p0); 
console.log(p1_relative_to_p0); 

這是來自THREE.Vector3的原型的子功能:

sub: function (a, b) { 
    this.x = a.x - b.x; 
    this.y = a.y - b.y; 
    this.z = a.z - b.z; 
    return this; 
}, 

控制檯輸出:

THREE.Vector3 X:0 Y:0 Z: 0

爲什麼不是t他輸出(0,50,-50)?

的代碼可以看出,在這裏的行動: https://dl.dropbox.com/u/2070405/webgl_lines_splines_jon.html

回答

3

你成了console.log告誡的受害者。在Chrome中,當您將其記錄爲時,記錄對象的計算結果爲,而不是在您記錄它時。

由於return this,的確如此p1_relative_to_p0 === dummy。您稍後將更新dummy,因此也會更新p1_relative_to_p0,因爲對象是通過JavaScript共享的。當您展開對象時,您實際上正在讀取dummy的內容,其內容已被設置爲0, 0, 0

嘗試設置斷點而不是日誌以停​​止執行以觀察正確的值。

+2

或者試試這個'console.log(p1_relative_to_p0.x,p1_relative_to_p0.y,p1_relative_to_p0.z )'。 – mrdoob

+0

... Firefox我來了 – loldrup

2

我試圖重複的行爲here,但它的工作完全按照自己的意圖。你有沒有偶然地從錯誤的地方讀取數值?

+0

現在我已將所有console.log語句(除了一個)移到註釋中。剩下的就是你在上面代碼中看到的那個。它仍然說0,0,0。 :( – loldrup

+0

你可以在這裏看到我的代碼: https://dl.dropbox.com/u/2070405/webgl_lines_splines_jon.html – loldrup