0

次の問題があります。lookAtメソッドが正常に機能するカメラがあります。カメラの親となる親ノードがあります。カメラのlookAtをターゲットに維持したまま親ノードを回転させると、カメラのlookAtも変化します。は、私が達成したいことでもありません。カメラをnullオブジェクトにペアレント化する場合、Adobe AEのように機能する必要があります。nullオブジェクトを回転させると、カメラはターゲットを見ながらターゲットの周りを周回し始めます。親のモデル行列にlookAt()メソッドから計算されたカメラモデル行列を乗算します。乗算する前に、行列の1つを分解(または再構成)する必要があると確信しています。親モデルまたはカメラモデル?ここの誰もがそれを行う正しい方法を示すことができますか?

更新:親は単なるノードです。子はカメラです。AfterEffectsの親カメラは次のように機能します。カメラがターゲットを見ているときに親ノードを回転させると、カメラは実際には親の回転に基づいてターゲットの周りを周回し始めます。 。私の場合、親の回転もカメラのlookAt方向を変更しますが、これは私が望むものではありません。更新1:私はGL 4.0を使用しており、固定パイプラインはなく、すべての計算は手動で行われます。

4

2 に答える 2

0

OpenGLはシーングラフではありません。オブジェクトもカメラもありません!gluLookAtはOpenGLでさえなく、単なるヘルパー関数であり、適用された変換階層をまったく認識していません。OpenGLはシーンとglPushMatrixを処理しないため、glPopMatrixは何か大きなことが起こっているという誤った感覚を与えるため、間違った方法でそれについて考えるように誘惑された可能性があります。

あなたが期待するすべての数学を行うことはあなたの責任です。これがあなたがすることです:

  1. OpenGLの固定関数行列操作メソッドは使用しないでください。これらは非推奨になり、OpenGLの新しいバージョンから削除されました。

  2. 完全に機能するシーングラフを実装します。これには、機能の完全な行列数学ライブラリを使用します。最も重要なことは、変換階層ツリー内の任意の2つのノード間の変換(行列)を決定するためのメソッドが必要になることです。最も簡単なアプローチは、開始ノードとターゲットノードから、共有の祖先ノードに到達するまで、最上位に移動しながら右結合乗算を実行することです。次に、開始ノードからの変換構成に、逆ターゲットノード変換構成を乗算します。結果はそれらの間の変換です。

ノード間の変換を決定できるようになったので、その変換によって定義されたスペース内で操作を適切に確認するためのツールがあります。

于 2012-11-14T10:18:37.997 に答える
0

実際の問題は、ビューとモデルマトリックスの状態にありました。位置ベクトルがすでに否定された後、ビューマトリックスを誤って反転したので、正しいことは、親ノードのモデルマトリックスにカメラビューマトリックスを乗算することで、問題は解決しました。

于 2012-12-13T08:44:35.817 に答える