1

为什么在这种情况下 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;
},

控制台输出:

三.Vector3 x: 0 y: 0 z: 0

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

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

4

2 回答 2

2

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

由于return this,确实如此p1_relative_to_p0 === dummy。您dummy稍后会更新,因此也会更新p1_relative_to_p0,因为对象在 JavaScript 中是共享的。当您展开对象时,您实际上是在阅读同时dummy设置为的内容0, 0, 0

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

于 2012-08-30T20:26:19.390 回答
1

我试图在此处复制该行为,但它完全按照您的预期工作。您是否有可能只是不小心从错误区域读取值?

于 2012-08-30T19:16:58.833 回答