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;
},

コンソール出力:

THREE.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。オブジェクトはJavaScriptで共有されているため、dummy後で更新することになります。オブジェクトを展開すると、その間に設定されたの内容をp1_relative_to_p0効果的に読み取ることができます。dummy0, 0, 0

ログの代わりにブレークポイントを設定して実行を停止し、正しい値を確認してください。

于 2012-08-30T20:26:19.390 に答える
1

ここで動作を複製しようとしましたが、意図したとおりに機能しました。間違った領域から誤って値を読み取っていた可能性はありますか?

于 2012-08-30T19:16:58.833 に答える