問題タブ [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.

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

c++ - C / C++ 行列の乗算順序

数学では、3 つの行列 'A'、'B' および 'C' が乗算され、4 番目の行列 'D = A * B * C' になる場合、次数は右から左に計算する必要があります。明確にするために括弧を使用すると、前のステートメントは次のステートメントとまったく同じです。「D = (A * (B * C))」。

これが式 '{ M = A * B * C * D } == { M = (A * (B * (C * (D)))) }' にどのように適用されるかを確認できます。これは別の例です。

C、C++ では、除算を使用して、C および C++ で演算が行われる順序を確認するテストを実行しました。

ただし、これを行うには、おそらくアセンブリ コードをコンパイルするより良い方法があります。

これにより、次の出力が得られます。

これは、行列を表すクラスを作成する場合、浮動小数点演算と除算の例は左から右に評価されるため、乗算の順序は左から右になることを示唆しています。 3 つの操作の優先順位は同じです。

OpenGL 数学ライブラリである GLM では、行列演算は括弧を必要とせずに正しい順序で計算されます。

operator*() はどのようにこのように動作するようになっていますか?

編集

ええ、そうです、それは私に指摘されたので、実際には問題ではありません。その場合、私の質問は「順序を変更することは可能ですか?」(もしかして眠い?)

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

c++ - 任意の単一軸で GLM クォータニオン回転を無効にする方法は?

OpenGL ESシーン内で「カメラ」を回転させるセンサーから派生したクォータニオンがあります。また、このクォータニオンの逆数をシーン内の特定のオブジェクトに適用することで、オブジェクトが「カメラ」に「向き合っている」ようになりました。これは期待どおりに機能します。問題は、これらのオブジェクトの Z 軸の回転を無効にする必要があることです。Z コンポーネント内で回転しないクォータニオンをどのように考え出すのですか?

私のテスト: オイラー角を抽出し、否定四元数を作成し、2 つの四元数の乗算からこれらのオブジェクトの回転行列を作成しようとしましたが、結果は正しくありません。

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

c++ - glm::lookAt 垂直カメラが z <= 0 のときに反転する

OpenGL を使用して 3D シーンを飛び回る FPS スタイルのカメラに取り組んでいます。私は数学に GLM を使用しており、マウスの動きを使用して、x 軸と y 軸に glm::rotate を使用して方向ベクトルを計算します。水平軸での機銃掃射に問題がなく、実際にロールを必要としないため、静的なアップ ベクトルがあります。

ただし、負の z 方向に向かって前進し、最終的にシーンの中心点 (z=0) に到達すると、垂直カメラが反転します (y 方向)。マウスを下に移動すると、上に移動します。方向ベクトルは本来あるべきように計算されるので、glm::lookAt がそのビュー マトリックスを計算する方法と関係があると思いますか?

関連するコードは次のとおりです。

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

c++ - Mac OS X で CUDA 5.5 を使用しているときに Kernel failed エラーが発生する

私は CUDA Raytracer を書いていますが、奇妙な問題で立ち往生しているようです。Mac OS X で GCC4.2.1 とともに CUDA 5.5 を使用しており、GLM 0.9.4.4 を使用しています。raycastFromCameraKernel 関数を呼び出すたびに、次のエラーが発生します。

Cuda エラー: カーネルが失敗しました!: OS 呼び出しが失敗したか、この OS では操作がサポートされていません。

glm::normalize(temp)いくつかのデバッグの後、問題を関数に絞り込んだと思います。独自の正規化関数を記述してこれを置き換えると、コードは正常に機能します。興味深いことに、glm::normalize を使用してサンプル プログラムを作成し、動作するかどうかを確認したところ、正しくコンパイルされて実行されました。

問題のある関数のコードは次のとおりです。

誰か助けてくれませんか?

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

c++ - FPS スタイルのカメラ

私はGLMが初めてで、fpsスタイルのカメラクラスを書こうとしています

マウスを動かしたときにアップ ベクトルを再計算する必要がありますか?

ただし、アップベクターを変更すると、すべてが奇妙に見えます

それでも、アップベクターを維持すると、私のプログラムはバグがあるように見えます

ファイル: fpscamera.cpp

ソースコードとバイナリはこちらからダウンロードできます

https://docs.google.com/file/d/0B9givuJvSet8ekRReWtRM29ldzg/edit?usp=sharing

mingw-built64 g++4.8(C++11) glfw3 GLM(MathHelper Library)が必要

g++ -std=c++0x -Wall main.cpp mesh.cpp fpscamera.cpp -lglfw3 -lopengl32 -lglu32 -lgdi32

ターゲットに向かって移動... W

左/右に曲がる.... Q/E

左/右に移動.... A/D

=====================2013/8/6 edit カメラクラスを編集してヨーピッチロール機能を追加

ヨーとピッチでマウスカメラコントロールを実装します

問題はまだそこにあります....

イニシャル

円のパスに沿ってマウスを数回動かした後.....

最後の