問題タブ [quaternions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
466 参照

c++ - クォータニオンの標準位置?

2Dでは、ベクトルの標準位置は正のX軸の下にあります。クォータニオンに相当する位置はありますか?

0 投票する
1 に答える
269 参照

math - クォータニオン回転行列が予期せず反対の意味を持つ

四元数に関する理解の問題があります。

ワールド オブジェクトを正しい方法で回転させるには、オブジェクト ワールド マトリックスを更新しながらクォータニオン回転を反転する必要があります。

次のコードでオブジェクトの回転を作成します。

オブジェクトの World マトリックスを次のように更新します。

これは機能していません。オブジェクトを本来とは逆に回転させます。

これは、オブジェクトを正しく回転させる方法です:

オブジェクトの回転を反転する必要があるのはなぜですか?

0 投票する
1 に答える
832 参照

opengl - 3 つのベクトルを持つ OpenGL カメラ

さて、私は OpenGL でカメラを作成するのに役立つこのチュートリアルに従っていました: http://nehe.gamedev.net/data/articles/article.asp?article=08

それで私はそれに従い、苦労した後、最終的にカメラの3軸を表す3つのベクトルを持つソリューションを手に入れました。

しかし、問題は?その情報を使用して実際に正しい回転/平行移動を取得する方法がわかりません! 最初のパラメーターにカメラの位置を使用し、次にターゲットにカメラの Z 軸を使用し、アップパラメーターに Y 軸を使用して、gluLookAt を使用してみました。その結果、私が上下左右に移動しても、カメラは 1 点を見続けることはなく、回転はさらに奇妙な動作をします...

私は完全に間違ったアプローチを取っていますか?クォータニオンを使用して必要な変換を何らかの方法で計算することを検討しましたが、必要なパラメーターを取得する方法/開始方法がわかりません...基本的には、単純なFPSのようなカメラから始めたいだけです、動き回ったり、上/下や側面を見たりすることができます(以前は、見上げてから振り返るときを除いて、ほとんど機能していましたが、回転が台無しになりました...)

一般的または具体的なヘルプをいただければ幸いです。私は何時間もこれに取り組んできましたが、状況はまったく改善されていません...

要約すると... ヨー/ピッチ/ロールができるカメラを作るのに助けが必要です... 一点を見つめることに固執することはありません。

編集: わかりました、どうやら正しい順序で回転させると本当に役に立ちます! 愚かな私。いずれにせよ、カメラの 3 つの軸を使用して変換のクォータニオンを形成する方法を知りたいと思っています。

0 投票する
1 に答える
798 参照

3d - 3D角度を等量に分割する

2Dオブジェクトがある場合、中心を15度ずつ回転させるだけで、これを15度の回転に簡単に分割できます。

3Dオブジェクトについて、それぞれの間に等間隔で可能なすべての角度を計算したい場合、これをどのように実行しますか。

それぞれに対してp*r * yを実行すると機能しますが、それはかなり恣意的であり、膨大な量の重複があります。クォータニオンソリューションも本当に欲しいです。

私は現在取り組んでいるビデオゲームプロジェクトのためにこれを行っています。これは基本的に、ゲームプレイの3Dは2Dスプライトとしてレンダリングされる古い学校のフライトシムです。私は、飛行機モデルのすべての可能な角度を、それぞれの直交する角度を含む等間隔の角度で手続き的にレンダリングする簡単な方法を探しています。

0 投票する
1 に答える
2084 参照

3d - シンプルな 3D プロジェクションとオリエンテーション処理?

私は現在、風変わりなレトロ フライト シミュレーションに取り組んでおり、3D プロジェクトでいくつかの問題に遭遇しました。

次の情報が与えられた場合、ゲーム ワールド内の単純な位置ベクトルを画面上の 2D ベクトルに変換するにはどうすればよいですか。

カメラの位置 カメラの向き (以下を参照) 視野 スクリーンの高さと幅 (および縦横比)

向きを保存する方法も探しています。基本的なベクター ライブラリは既に作成していますが、カメラ (および投影コード) と回転の実際の処理の両方で使用する回転を保存する方法がわかりません。ゲーム内オブジェクトの。現在、四元数の使用を検討していますが、射影変換に行列の代わりに四元数を使用することは可能ですか (そして簡単ですか)?

コードでの四元数の実装に関する適切な情報源はありますか? 複素数用に別のライブラリを作成する必要がありますか?

お時間とご協力いただきありがとうございます:)

0 投票する
2 に答える
1546 参照

java - LWJGL - 四元数と変換行列を使用して 6DOF カメラで「ロール」を実装する際の問題

この問題に数週間費やしましたが、適切な解決策が見つからないようで、アドバイスが必要です.

LWJGL/Java を使用して Camera クラスの作成に取り組んでおり、クォータニオンを使用してベアリング (ヨー)、ピッチ、ロールの回転を処理しています。このカメラが 3D 空間で 6 度の動きすべてを処理し、ロールすることを望みます。ベアリング、ピッチ、ロールはすべてクォータニオンです。それらを「変更」四元数に乗算し、そこから変換行列を作成します。それを float バッファーに入れ、モデルビュー マトリックスに回転マトリックスを含むバッファーを掛けます。

ベアリングとピッチの回転は正しく機能しますが、ロールを実装すると問題が発生します。主にZ軸周りの回転(ローリング)がうまくいかないようです。カメラを「回転」させると、ローカル カメラの方向軸ではなく、グローバル Z 軸を中心に回転しているように見えます。通常、クォータニオンを乗算する順序に応じて、3 つのうち 2 つを機能させることができますが、それらを一緒に機能させることはできません。

それらはすべて独立して動作するため、それらを組み合わせて回転行列を構築する方向方法に何か問題があると思います。クラス全体を貼り付けるのに問題があるため、回転に関連するメソッドと宣言を次に示します。

...

Vector3f、Quaternion、Matrix4f はすべて LWJGL クラスであり、カスタムメイドではありません。

私の質問は、ベアリング、ピッチ、ロールを表す 3 つのクォータニオンが与えられた場合、ModelView マトリックスを変更してこれらの回転を正確に表すにはどうすればよいですか?

編集:これは非常に近いと思います。RiverC のコメントの Gist リンクを参照してください。非常に多くの角度で回転した後、回転すると通常の状態に戻る前に、ビューが大きくジャンプします。要点はそこにありますが、まだ少しずれています。

0 投票する
1 に答える
5163 参照

java - マウスの動きに基づいてクォータニオンを回転させる(OpenGLおよびJava)

私はOpenGL(具体的にはLWJGLバインディング)を使用してJavaでゲームを書いています。カメラを含む各エンティティには、回転を表すクォータニオンがあります。クォータニオンを現在のOpenGLマトリックスに適用する方法を理解しましたが、すべてが正常に回転します。私が抱えている問題は、カメラをマウスで回転させることです。

現在、フレームごとに、ゲームはマウスが1つの軸上で移動した量を取得し、その量をカメラの回転のためにクォータニオンに適用します。クォータニオンを回転させるコードは次のとおりです。問題が発生する場所だと思うので、投稿します(ただし、この種のことについては常に間違っています)。

このメソッドは、X軸を中心にクォータニオンを回転させることになっています。「回転」は、エンティティの回転を表すクォータニオンです。「amount」は、クォータニオンを回転させたい量(マウスを動かした量)です。'rot'は、ラジアンに変換された量のaw値を持つX軸に沿った正規化されたベクトルです(ここでの目標は、角度(たとえば、10度)を与え、指定された軸に沿ってクォータニオンを回転させることです。角度)。Quaternion.mulを使用すると、新しいクォータニオンを取得し、それを回転クォータニオンで乗算してから、結果を回転クォータニオンとして格納します。'rot'は正常であり、'rotation'はすでに正規化されているはずなので、正規化が必要かどうかはわかりません。

rotateYメソッドとrotateZメソッドは、「rot」のベクトルを変更することを除いて、同じことを行います(yの場合は0.0、1.0、0.0、zの場合は0.0、0.0、1.0)。

ゲームが開始され、カメラが負のZ軸を見下ろしている場合、コードは正常に機能しているように見えます。Y軸を中心に、またはX軸を中心に回転できます。しかし、Z軸を見下ろさずにカメラを回転させようとすると、すべてが本当に厄介になります(私はそれを説明することさえできません、それは非常に奇妙に回転します)。

ここでの私の最終目標は、アップベクトルのない空間で船を制御するために使用するものを用意することです。したがって、Y軸上でマウスを動かすと、船の角度に関係なく、船のピッチが変化します(X軸に沿った回転)。同様に、X軸上でマウスを動かすと、ヨー(Y軸に沿った回転)が変わります。私はこれを間違った方法で行っている可能性があり、おそらく正しい方向に押す(または突き出す)必要があります。

何か(私のレンダリングがどのように行われるか、私がやろうとしている他の数学)についてさらに詳細が必要な場合は、質問してください。私はオイラー角を使用していたときにすべてを理解しました(これは明らかに3Dアプリケーション開発にとっては大したことではありません...誰かが私がそれらを動作させるために多くの時間を沈める前に私に言ってくれたらいいのにと思います)クォータニオンに切り替えて、私は頭をとても速く乗り越えました。私は過去数か月間、このコードで遊んで、それを機能させるためにクォータニオンについて読んでいましたが、実際にはどこにも到達していません:'(

非常に、非常にイライラします...3Dで何かを作ろうとしたことを後悔し始めました>_ <

0 投票する
1 に答える
278 参照

c# - ブロックの6つの側面を回転させる

The Hazy MindによるXNAチュートリアルに従っていますが、Position(Vector3)とRotation(Quaternion)を持つベースオブジェクトがあります。オブジェクトモデルは次のようになります クラス図

チュートリアルのカメラの実装から、RotationメソッドとRevolveメソッドのコピーを作成し、それらをオブジェクトに実装しました。

私のBlockオブジェクトはQuadの6つのインスタンスを作成し、各Quadオブジェクトでrenderメソッドを呼び出します。各Quadにオフセットと回転を割り当てて、次のようなテクスチャブロックを形成します。 6つのQuadオブジェクトによってレンダリングされたブロック

そして今、実際の問題があります。BlockオブジェクトでRotateを呼び出すと、オブジェクト自体の回転が変更され、Quadオブジェクトは回転しません。したがって、Blockオブジェクトに新しいRotate関数を実装しました。

しかし、これはここに見られるように私に期待された結果を与えませんでした:

ブロックオブジェクトが回転しました

間違った解決策

次の解決策は機能しますが、あまり一般的ではなく、制限されます。回転させたい軸をチェックし、すべての側(Quadオブジェクト)を正しい方向に回転させる一連のifステートメント。

適切な解決策

または、QuadオブジェクトのレンダリングをBlockオブジェクト(その親)の回転に依存させることもできますが、これを行う方法がわかりません。

3番目で最後のオプションは、Rotateメソッドで各Quadオブジェクトの回転と位置を正しい値に更新することです。これも、どのように行うかがわかりません。

質問

だから私が求めているのは、これに関するいくつかのアイデアや考え、おそらくXNAでQuaternionsを使用する方法を説明するいくつかのリンクやチュートリアルです(できれば視覚的な方法で)。

乾杯、あなたの入力を楽しみにしています:)

0 投票する
2 に答える
5462 参照

c++ - クォータニオンからOpenGLローテーションまで

キーで回転させたいオブジェクトがあります。オブジェクトはヨー、ピッチ、ロールする必要があります。いろいろ試してみたところ、glRotate限界があり、その機能でそのようなものを実装することはできないと思いました。

少し調べて、クォータニオンベースの回転について調べました。回転行列を介して回転することも可能ですが、ほとんどの人がクォータニオンをこれまでで最高のものと説明しています。

私はクォータニオンについて読み、それらをかなりよく理解しましたが、OpenGLプログラムでそれらを実装する方法はまだ謎です。誰かが小さな例を知っていますか?クォータニオンクラスの実装方法ではなく、使用方法。物事をまとめる方法がわかりません。

0 投票する
1 に答える
451 参照

c++ - クォータニオンによる回転が正しくありません

前の質問に続いて、オブジェクトをクォータニオンで回転させることができましたが、まだ小さな問題があり、それを解決する方法がわかりません。以下のコードで、オブジェクトはx軸とy軸を中心に回転します。ただし、xキーとyキーを切り替えると、常に初期位置に戻ります。したがって、新しい位置からローテーションを取得することはありませんが、常にプログラムが開始された位置からローテーションを取得します。

私の言いたいことをご理解いただければ幸いです。