three.js:THREE.Vector3.sub()表现得很奇怪

时间:2012-08-30 18:55:55

标签: javascript three.js

为什么THREE.Vector3.sub会在这种情况下返回(0,0,0)?

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

为什么输出不是(0,50,-50)?

代码可以在这里看到: https://dl.dropbox.com/u/2070405/webgl_lines_splines_jon.html

2 个答案:

答案 0 :(得分:3)

你成了console.log警告的受害者。在Chrome中,记录的对象在展开时进行评估,而不是在记录时进行评估。

由于return thisp1_relative_to_p0 === dummy确实如此。您稍后会更新dummy,因此p1_relative_to_p0也会更新,因为对象是在JavaScript中共享的。展开对象时,您可以有效地阅读dummy的内容,同时将其设置为0, 0, 0

尝试设置断点而不是日志来暂停执行以观察正确的值。

答案 1 :(得分:2)

我尝试复制行为here,但它完全符合您的预期。你有没有机会偶然从错误的区域读取值?