問題タブ [glm-math]
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.
c++ - lookAtを使用したカメラの回転
やあみんな私はglmライブラリのlookAtを使用するCameraクラスをやろうとしています。私には4つのポイントがあります。1つ目は目、つまり空間内のカメラの位置、2つ目は外観、つまりカメラが見ているポイント、3つ目はuppで、カメラの向きを設定します。 、そして4番目はサイドです。これは、look-eyeとupp-eyeの外積です。
したがって、最終的には、アイポイントを原点とする3つのベクトルのベースを取得しました。カメラの座標系を取得しました。
私のカメラクラスでは、世界の座標系ではなく、カメラの座標系を中心に回転できるようにしたいと考えています。だから私がやっていることは、カメラの座標系の軸の1つを中心に回転することです。
次のような初期値でクラスを作成します。
たとえば、座標系をx軸を中心に回転させたい場合は、次のようにglmから関数を呼び出します。
これまでのところ、すべてのポイントがカメラの座標系を形成しており、すべてのベクトルが互いに垂直であることを理解しています。
しかし、次に、lookAt関数で取得したこれらのポイントを使用して、カメラを世界に配置します。
そして、このマトリックスにOpenGLのmodelviewマトリックスを掛けます
たくさん回転し始めると、数回転した後のカメラは、他の方法で回転していたように、回転を「反映」します(実際に何が起こっているのかをより良い方法で説明する方法がわかりません= s)。
何が起こっているのか本当にわかりません。回転を適用した後、ベクトルを正規化する必要がありますか?ジンバルロックに問題がありますか(ジンバルロックについてはよくわかりません)?
c++ - GLM: もうコンパイルできません
誰かがこのライブラリをもう使用していますか?
昨年はうまくいきましたが、今はコードがコンパイルされていません:
(GCC 4.6.1 を使用する MinGW の場合):
これは最新バージョン 0.9.4.3 です。
最新のclangを使用したMacでの同様の問題:
これはヘッダーのみのライブラリです。こんな事があってはならない…
これは、4x4 行列の乗算と反転にのみ使用しています。私のアプリの残りの部分はLAPACKを広範囲に使用しているため、glmが必要とするものは何もありません。しかし、非常にポータブルにしようとしているコードがこのようにランダムに壊れるのは嫌いです。
c++ - openGL GLM とシェーダーを使用した不適切な回転
私のプログラムの目標は、Y 軸上で回転する単純な色付きの三角形を平行移動なしで表示することです。GLM ライブラリを使用しています。問題は、私の三角形の変換が正しくないことです。奇妙で論理的でない動作をしています。これが私の C++ コードと、頂点シェーダーとフラグメント シェーダーのコードです。
C++ コード:
頂点シェーダー コード:
フラグメント シェーダー コード:
モデルの単純なマトリックス回転を宣言すると、それを頂点シェーダーに送信し、それを MVP として使用すると機能します。しかし、射影行列 + ビュー行列を追加すると、正しく機能しません。ここに写真があります:
通常、三角形は画面の中央にあるはずです。
誰でも私を助けることができますか?
opengl - 回転行列を使用してオブジェクトの右ベクトルを決定する
3D 空間で機銃掃射できるように、既に回転行列を計算したオブジェクトの get Right ベクトルを見つけようとしています。これまでに私は得た
もう少し見つめた後、問題が実際にそこにあるかどうかを考えながら、左右に移動するハンドラーを投稿しています。
ピッチングとヨーイングのみを行う限り、これは正常に機能しています。オブジェクトが回転しようとするとすぐに、正しいベクトルが本来あるべき場所から 90 度向きます。RotationMatrix の最初の行を抽出して Right も取得できることはわかっていますが、上記のコードと同じ結果が得られます。
問題を説明する画像 http://img442.imageshack.us/img442/5046/directionexample.jpg
c++ - オイラー角をフロント、アップ、ライト ベクトルに変換する方法
Yaw、Pitch、Roll を指定して、「ワールド座標」で Front (または Look At)、Right、および Up ベクトルを生成できる関数が必要です。
私の特定のワールド空間では、原点 (0,0,0) から始めて、X は左側が正、Z は視聴者/原点から離れる方向が正、Y は上方向が正です。
たとえば、与えられた... (度単位の角度)
ヨー = 0、ピッチ = 0、ロール = 0、期待される出力は次のとおりです。
- フロント = (0.0,0.0,1.0)
- 右 = (-1.0,0.0,0.0)
- アップ = (0.0,1.0,0.0)
ヨー=90、ピッチ=0、ロール=0、期待される出力は次のとおりです。
- フロント = (1.0,0.0,0.0)
- 右 = (0,0,0.0,1.0)
- アップ = (0.0,1.0,0.0)
ヨー = 0、ピッチ = 90、ロール = 0、期待される出力は次のとおりです。
- フロント = (0.0,1.0,0.0)
- 右 = (-1.0,0.0,0.0)
- アップ = (0.0,0.0,-1.0)
ヨー = 0、ピッチ = 0、ロール = 90、期待される出力は次のとおりです。
- フロント = (0.0,0.0,1.0)
- 右 = (0.0,1.0,0.0)
- アップ = (1.0,0.0,0.0)
私が使用している言語は C++ です。この問題を解決するのが最も理にかなっていれば、喜んで glm を使用します。クォータニオンを介してそこにたどり着くことができれば、オイラー角からクォータニオンを取得する方法を説明する他のチュートリアルを見つけたので、その解決策でも問題ありません。
quaternions - 試行錯誤して思いついたのですが、その理由を教えてください。
まず、この質問がここでいいのか分からず、よくある質問を確認したところ、「他の人に説明してほしい」という質問があることがわかりました。
主な問題は、アプリケーションですべてのオブジェクトの回転を 2 回保存する必要があることです。これは一方で、私がBullet Physicsを使用する物理シミュレーションがその表現を保存するためです。一方、光やクエスト ターゲットなど、物理シミュレーションに含まれているかどうかに関係なく、すべてのオブジェクトに共通する回転を独自に保存します。物理ライブラリに加えて、GLM数学ライブラリを利用しています。
両方の表現を同期する必要があります。ちなみに、位置とスケールは問題ありません。難しいのは、物理シミュレーションは自分の表現が異なるため、単に値をコピーすることはできません。これらの違いをすべて見つけたわけではありませんが、左手と右手の座標系、度とラジアン、および Y 座標のアップと Z アップに関連している可能性があります。
私自身の表現では、オイラー角をglm::vec3
ベクトルに格納するだけです。私は描画に OpenGL を使用しているので、スペースは右利きだと思います。オイラー角の場合、順序が重要です。回転行列を計算するために私がすることは、最初に各成分の行列を作成し、次にそれらをX * Y * Z
順番に乗算することです。さらに、私自身の表現では、正の Y 座標は上向きです。
物理シミュレーションでは、クォータニオンを使用して回転を保存します。いくつかの調査の後、このライブラリではスペースが左利きであるという仮定を読みました。どの座標が上であるか、どの順序でオイラー角が返されるかについての情報はありません。
回転を物理シミュレーションから独自の表現に、またはその逆に変換するコードがここにあります。
試行錯誤でこの汚いコードを見つけましたが、動作します。しかし、ご覧のとおり、否定、コンポーネントのスウィズリング、およびさまざまな四元数型による型変換が見られます。それらの多くは不要であり、タスクははるかに簡単に実行できると思います。
私の変換が機能する理由と、それらを単純化する方法を説明していただけますか? ところで、変換がうまくいかなかった場合にどのように表示されるかを確認したいので、スクリーンショットを示します...
c++ - 2D ベクトルの配列を渡すためのベクトル データ ポインタの取得
私はOpenGLメソッドを持っています:
xtranslate は GLfloat の配列で、連続する数値の各ペアが 2 次元ベクトルを表す必要があります。私のアプリでは、xtranslate を表すデータ構造は次のとおりです。
上記のメソッドに GLFloat* として渡すことが有効になるように、この構造体へのデータ ポインターを取得するにはどうすればよいですか
構造を手動で配列に「フラット化」する必要がありますか、それとももっとトリッキーな解決策がありますか?
Glm は、OpenGL テンプレートのみの数学ライブラリです。
ところで、OpenSceneGraph API にはそのようなベクトル構造のメソッドがあることがわかりましたが、実装のソースが見つかりませんでした。
c++ - このコードはどのオイラー角の次数になりますか?
数学ライブラリ GLM を使用して、このコードを使用してオイラー角回転を回転行列に結合します。
これは、XYZ または ZYX のオイラー角シーケンスになりますか? 行列の乗算はスカラー乗算と同じように動作しないため、よくわかりません。