0

何らかの方法で XTK カメラと対話した後 (移動、回転、ズーム)、カメラから位置、フォーカス、およびアップ ベクトルの新しい値を取得する方法はありますか? getter と setter がカメラ JavaScript で定義されているように見えますが、これらに対応する属性はインタラクション中に更新されません。camera.positionたとえば、によって返される値は、変換後も更新されません。

これらの値を提供できるメカニズム、またはカメラを変更するすべてのインタラクションにウォッチャーを追加する方法はありますか?

4

2 に答える 2

0

位置、上向きベクトル、およびフォーカスは、最初に3D空間を構成するために使用されます。次に、すべてのインタラクションは、作成されたビューマトリックスを変更するだけです。

このようにビューマトリックスをクエリできます

ren = new X.renderer3D()
console.log(ren.camera.view + "") // prints the view matrix as a string
于 2012-06-23T05:46:02.280 に答える
0

誰が仕事をするかに応じて、いくつかの解決策があります。

最初に: カメラにオプションを追加して追跡を有効にします (デフォルトでは無効)。アップ/位置/フォーカスを更新するオプションは簡単ではないでしょうか? ビュー行列に変換行列を掛けるのと同じ瞬間に、前のベクトルに変換行列を掛けるだけなので。ただし、運用に追加のコストがかかる可能性があります。または、「Second」のように計算できます

2番目:私の記憶が良ければ、ベース B(O(x,y,z), i ,* j *, k ) の変換行列 T はよく知られている構造 no ? このようなもの(転置を忘れているかもしれません):

 i1 j1 k1 u1
 i2 j2 k2 u2
 i3 j3 k3 u3
 0  0  0  1 

どこ :

 ([u1,u2,u3])=T(0(x,y,z)) i.e. gives the translation in the base B
 ([i1,i2,i3])=T(**i**)
 ([j1,j2,j3])=T(**j**)
 ([k1,k2,k3])=T(**k**)

次に、3 つの角度が必要な場合は非常に厳しいですが(オイラーの計算を参照)、他の角度が必要な場合は簡単です。たとえば、変換 T による基数 B の "k" ベクトルのイメージであるアップ ベクトルが必要な場合、[j1,j2,j3] はありませんか? この場合、フォーカス ポイントは簡単に取得できませんが、フォーカス ベクトルは簡単に取得できます。それは [k1,k2,k3] です! (実際には -1*[k1,k2,k3] かもしれません)。X.camera3D の LookAt_ メソッドをよく見ると、webgl にフォーカス ポイントを与えるのではなく、正規化されたフォーカス ベクトルを与えます。ポイントの位置は関係ありません。フォーカス ベクトルに 1 つのポイントが必要であり、それを計算できます。今、いいえ?currentposition と currentfocusvector 座標の合計です。

思い出がよければいいのですが、完全にたわごとを言っているわけではありません。

1 つだけ質問があります。ビュー マトリックスのセッターがあるのに、ビューを直接保存して設定するのではなく、なぜ保存して設定/フォーカス/位置を設定したいのですか?

PS:注意、スケール演算子kが存在する可能性があるため、行列は異なる場合がありますが、xtkにはないと思います。PS 2 : 太字はベクトルです。[number,number,number] は、彼の座標によって示される 3D ベクトルです。

于 2012-06-26T10:38:32.287 に答える