誰が仕事をするかに応じて、いくつかの解決策があります。
最初に: カメラにオプションを追加して追跡を有効にします (デフォルトでは無効)。アップ/位置/フォーカスを更新するオプションは簡単ではないでしょうか? ビュー行列に変換行列を掛けるのと同じ瞬間に、前のベクトルに変換行列を掛けるだけなので。ただし、運用に追加のコストがかかる可能性があります。または、「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 ベクトルです。