質問: glm::lookAt(glm::vec3(14,6,4), glm::vec3(0,1,0), glm::vec3(0,1,0)); ``` vecはベクトルらしいのですが、見た所vec3x3のような式であり、結果はmat3になるような気がします。 なぜこれがmat4として変数に入れられるのかがわかりません。 それとも、このlookAtには足りない部分を全て0として置き換える機能でもあるのでしょうか?
回答: > > matにはmat2 ~ mat4まであり、4x4行列であることはなんとなく理解しています。 > > 以下の画像のことで間違いはないでしょうか。 > > > その認識であっています。 > > また、以下のような使い方はできますか? > > 結果も教えて欲しいです。 > > > 実際試してみれば、わかることだと思いますが、1 ~ 4つの引数をとるようなコンストラクタは mat4 にはありません。 vector の間違いではないでしょうか? ``` #include #include #define GLM_ENABLE_EXPERIMENTAL #include int main() { glm::vec1 mat1(1.0); glm::vec2 mat2(1.0, 2.0); glm::vec3 mat3(1.0, 2.0, 3.0); glm::vec4 mat4(1.0, 2.0, 3.0, 4.0); std::cout << glm::to_string(mat1) << std::endl; std::cout << glm::to_string(mat2) << std::endl; std::cout << glm::to_string(mat3) << std::endl; std::cout << glm::to_string(mat4) << std::endl; } ``` ``` vec1(1.000000) vec2(1.000000, 2.000000) vec3(1.000000, 2.000000, 3.000000) vec4(1.000000, 2.000000, 3.000000, 4.000000) ``` > > これがなんなのか全くわからないです。 > > gym::mat4 a = glm::lookAt(glm::vec3(14,6,4), glm::vec3(0,1,0), glm::vec3(0,1,0)); > > > 第1引数がカメラの位置、第2引数がカメラを向ける位置、第3引数がカメラの上方向を表すベクトルです。 世界座標をカメラを中心とした座標に変換するのに使用します。 式の導出は以下を参考にしてください。 lookat 行列 > > なぜこれがmat4として変数に入れられるのかがわかりません。 > > > lookat 行列は 4x4 行列です。