質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.91%

glm系のmatとlookAtが理解できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,127

score 114

#include <glm/glm.hpp>

このglmモジュールにmatとlookAt関数がありますが、これらが意味していることがわかりません。

まずmatから

matにはmat2 ~ mat4まであり、4x4行列であることはなんとなく理解しています。
以下の画像のことで間違いはないでしょうか。
イメージ説明
また、以下のような使い方はできますか?
結果も教えて欲しいです。

mat4(1.0)             ///1 対角行列になるのかな?
mat4(1.0,2.0)         ///2 2~3は全部三角行列か何か?
mat4(1.0,2.0,3.0)     ///3
mat4(1.0,2.0,3.0,4.0) ///4

lookAt

これがなんなのか全くわからないです。

gym::mat4 a = glm::lookAt(glm::vec3(14,6,4), glm::vec3(0,1,0), glm::vec3(0,1,0));


vecはベクトルらしいのですが、見た所vec3x3のような式であり、結果はmat3になるような気がします。
なぜこれがmat4として変数に入れられるのかがわかりません。
それとも、このlookAtには足りない部分を全て0として置き換える機能でもあるのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

matにはmat2 ~ mat4まであり、4x4行列であることはなんとなく理解しています。
以下の画像のことで間違いはないでしょうか。

その認識であっています。

また、以下のような使い方はできますか?
結果も教えて欲しいです。

実際試してみれば、わかることだと思いますが、1 ~ 4つの引数をとるようなコンストラクタは mat4 にはありません。
vector の間違いではないでしょうか?

#include <iostream>

#include <glm/glm.hpp>
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/gtx/string_cast.hpp>


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 行列です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る