Javascript three.js:three.Vector3.sub()行为怪异
为什么在这种情况下THREE.Vector3.sub返回(0,0,0)Javascript three.js:three.Vector3.sub()行为怪异,javascript,three.js,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: func
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;
},
控制台输出:
3.Vector3
x:0
y:0
z:0
为什么输出不是(0,50,-50)
代码可以在这里看到:
我试图复制该行为,但它完全按照您的预期工作。有没有可能您只是意外地从错误的区域读取了值?您成为了
控制台.log
警告的受害者。在Chrome中,记录的对象在展开时进行计算,而不是在记录时进行计算
由于返回此
,因此p1\u relative\u to\u p0==dummy是正确的。您稍后会更新dummy
,因此也会更新p1\u relative\u to\u p0
,因为对象在JavaScript中共享。当您展开对象时,您正在有效地读取dummy
的内容,这些内容同时被设置为0,0,0
尝试设置断点而不是日志来停止执行以观察正确的值。现在,我已将除一条以外的所有console.log语句移动到注释中。左边的就是你在上面代码中看到的那个。它仍然写着0,0,0(你可以在这里看到我的代码:或者试试这个console.log(p1\u relative\u to\u p0.x,p1\u relative\u to\u p0.y,p1\u relative\u to\u p0.z)
。