2017-11-08 7 views
2

不正な値を持つ行列を出力::機能を翻訳:代わりの「GLM ::翻訳は、」私はGLMをテストするためのサンプルコードを取っ

-4.29497e+08, -4.29497e+08, -4.29497e+08 

glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f); 
glm::mat4 trans; 
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f)); 
vec = trans * vec; 
std::cout << vec.x << ", " << vec.y << ", " << vec.z << std::endl; 

これは、次の出力します予想通り2, 1, 0

私はそれについて何ができるでしょうか?

(私はこのコードの作品は外の欠陥を検索してください)

+0

何が正しい答えは '0'、 '2、1だと思いますか?デバッガでコードを踏んだことはありますか? MS VS 2017には素晴らしいグラフィックデバッガが組み込まれています。 – iksemyonov

+0

問題を再現できません。上記のコードでは、 '2、1、0'という出力が得られます。 – BDL

+2

再生できません。建設直後のトランスの成分は何ですか?私は 'glm'の古いバージョンを思い出しています。その' mat4'デフォルトコンストラクタは、恒等行列ではなく初期化されていないコンポーネントを残しました。 –

答えて

5
-4.29497e+08 

これは欠陥がであると信じるように私につながるアンダーフロー、次のようになります。

glm::mat4 trans; 

行列は初期化されていませんが、算術演算が実行されています。コンストラクタがメモリを初期化すると仮定することはできません。

glm::mat4 trans(1.0f); 

これでアンダーフローが修正されるはずです。

+0

レコードのみ:glmの新しいバージョンでは、デフォルトのコンストラクタは常に恒等行列を作成します。 – BDL

+1

おそらくそうかもしれませんが、プログラミングの慣行が良い場合は、RAII(Resource Acquisition Is Initialisation)も使用する必要があります。初期化されていないものは膨大な数のバグを説明しているので、この習慣に入るとより安定したコードが得られます。 –

-1

があなたの平行移動行列を初期化し

glm::mat4 trans(1); 
関連する問題