4

原点(0,0,0)を基準にして3D空間でポイントを見つけようとしています。このポイントを計算するための3つの値があります。x軸とy軸の両方を中心とした度単​​位の回転と、「ビュー距離」です。これらの値を使用して、原点を基準にして3D空間内のポイントを特定するにはどうすればよいですか?基本的な三角関数を使用してみましたが、結果はランダムに見えます。下の画像は、何をする必要があるかを視覚的に示しています。

ここに画像の説明を入力してください

  • 「vd」は「ビュー距離」です
  • 「c」はバリューホルダーです
  • '(x、y、z)'は私が見つけようとしている座標です

私がやろうとしているのは、プレーヤーが特定の距離から見ているポイントを見つけることです(特定の距離から離れたプレーヤーの直接の視線内のポイントを見つけます)。x軸とy軸を中心とした回転は常に変化しますが、表示距離は同じままであることに注意してください。誰かがこれを行うための提案、方法、または説明が必要な場合は、以下にコメント/回答してください。

私はこれをLWJGLで行っており、使用しているコードは次のとおりです。

    float c = (float)(Math.cos(Math.toRadians(A00.rot.y)) * view_distance);
    locate.y = (float)(Math.sin(Math.toRadians(rot.y)) * view_distance);
    locate.x = (float)(Math.cos(Math.toRadians(rot.x)) * c);
    locate.z = (float)(Math.sin(Math.toRadians(rot.x)) * c);

編集:

私の問題は、この現在の設定が何らかの理由で機能しないことです。数学は私には正当に思えますが、グラフの実際の設定のどこかに何か問題があるはずです。

4

1 に答える 1

1

クォータニオンを検索することをお勧めします。それらがどのように機能するかを完全に理解する必要はありません。インターネット上でも利用可能なJava用の既製のクラスを見つけることができます。クォータニオンを使用すると、3D空間で回転を表すことができます。

次に、原点から前方を指す方向を表すベクトルから始めて、プレーヤーが現在持っているのと同じ回転を適用します。これで、プレーヤーと同じ方向を向いています。ここで、プレーヤーの現在のポイントと方向ベクトルを取得すると、プレーヤーが見ている場所を表す光線が得られます。

クォータニオンの詳細については、このリンクをお勧めします。それらは複雑に見えるかもしれませんが、私が言ったように、それらを使用できるようにするためにそれらがどのようにそしてなぜ働くのかを完全に理解する必要はありません。数式をコピーして、その使用方法を学ぶだけです。それらの使用方法を理解すると、3D回転が非常に簡単になります。

http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation

于 2012-12-10T01:16:21.653 に答える