許してください、しかし私は助けを必要としています、そして私は今数週間これに行き詰まっています、私は進歩を遂げておらず、どこへ行っても私は別の答えを見ます、私が試みるすべてがうまくいきません。私は十分なヒントとアドバイスを持っています。今、私はこれを理解することができないので、誰かが私に後戻りするための答えをくれる人を本当に必要としています。
この主題を最も混乱させたのは、誰もが異なる規則または規則のセットを使用する方法であり、それらの答えは、何であるかを定義せずに独自の規則に基づいています。
だからここに私が最も一般的で論理的であると思われるものに基づいて形成した一連の規則があります:
- 軸の右手の法則。
- 正のYは上向き、正のZは視聴者向き、正のXは右向きです。
- シェーダーに送信されるときに転置される行メジャー行列。
- ピッチ:X軸を中心とした回転
- ヨー:Y軸を中心とした回転
- ロール:z軸を中心とした回転
- ローテーション順:ロール、ピッチ、ヨー(これは正しいですか?誰かがこれを確認できますか?)
- 正の回転値は、軸の正の端から見下ろすと、時計回りに回転します。
- すべての軸にわたる0回転のデフォルトの方向は、負のYを指すベクトルです。
..それらの慣例を考えると(間違っている場合は必ず私を訂正してください!)
- LookAt関数を記述しますか?(lookAt(ベクター位置、ベクターアイフォーカス、ベクターアップ))
- 回転行列を計算します。(回転(x、y、z))
私はこれらの2つの質問に少なくとも過去3週間以上答えてみました。LookAt&Rotation Matrix関数を少なくとも30回書き直しました。何百ものウェブサイトと多くの解答された質問を読み、他の人々のコードをコピーしました、そして私がこれまでに作った何もうまくいきませんでした、すべてが間違った結果を生み出しました。それらのいくつかは、正しい回転にさえ近くないいくつかの陽気に奇妙な出力を生成しました。
私は昨夜を除いて毎晩これに取り組んできました。繰り返し失敗することにとてもイライラしていて、私は立ち止まって休憩しなければならなかったからです。
正しい方法を教えてください。それから逆に作業して、それがどのように機能するかを理解できます。正しい答えが得られず、これが私を少し狂わせています!
私はJavaで書いていますが、任意の言語で書かれたコードを使用します。私の3Dレンダリングコードのほとんどは実際には非常に見事に機能しています。それは理解できない数学にすぎません。
更新:解決済み
ご協力ありがとうございました!私は実際に私が実際に理解しているルックアット関数を手に入れました、そして私は幸せにすることができませんでした(誰かがぜひともそれを見たいと思っているなら)。
ピッチ/ヨー/ロール変数に基づいて回転行列を作成することを再試行しましたが、再び失敗したようですが、フリールックカメラのオイラー角を使用しようとしてダンプすることにしました。代わりに、クォータニオンクラスを作成し、そのパスを下る方が幸運かもしれません。それ以外の場合は、球座標としてピッチ/ヨーを使用し、回転には新しい機能のLookAt関数を使用します。
他の誰かが同様の問題に直面していて質問をしたい場合は、遠慮なくお問い合わせください。
助けてくれてありがとう!