为什么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
答案 0 :(得分:3)
你成了console.log
警告的受害者。在Chrome中,记录的对象在展开时进行评估,而不是在记录时进行评估。
由于return this
,p1_relative_to_p0 === dummy
确实如此。您稍后会更新dummy
,因此p1_relative_to_p0
也会更新,因为对象是在JavaScript中共享的。展开对象时,您可以有效地阅读dummy
的内容,同时将其设置为0, 0, 0
。
尝试设置断点而不是日志来暂停执行以观察正确的值。
答案 1 :(得分:2)
我尝试复制行为here,但它完全符合您的预期。你有没有机会偶然从错误的区域读取值?