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

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

新規登録して質問してみよう
ただいま回答率
85.50%

Q&A

解決済

1回答

844閲覧

godot engine 行列計算とはなんのためにあるのか?

blendegg

総合スコア81

0グッド

0クリップ

投稿2019/05/26 00:54

###質問1
行列計算というものが3dで使われるシチュエーション、必要性がわからないのですが、ぼんやりとしたイメージでもいいので、簡単に説明できないでしょうか。
godotゲームエンジンですが、こういった3×4の行列のようです
matrixの部分です
イメージ説明
プログラムで表現するとこうなると思います
((x,y,z)(x,y,z)(x,y,z)(x,y,z))

###質問2
たとえば均等に拡大使用とおもったら斜めに並んでいる1をすべて2にすることで、均等に拡大出来ます。しかし、他の数字の役割がわかりません。例えば行列[0].yを変更してみるとShearのような変形になります。法則性が見えてきません。

これらを変更することで均等に拡大出来ました。
行列[0].x
行列[1].y
行列[2].z
(4つ目の行列はよくわかりませんが、平行移動云々と聞きました)

以前の質問と少し関連していますが使われるシチュエーションがよくわかりません

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1
そういうことを考えなくても変形・座標変換ができるためにあります。
例えば「モデルを拡大する行列」と「モデルを回転する行列」を掛け合わせると「モデルを拡大して回転する行列」になり、
「ローカル座標からワールド座標への変換行列」と「ワールド座標からカメラ座標への変換行列」を掛け合わせると「モデルを拡大して回転してローカル座標からカメラ座標へ変換する行列」ができます。
その出来上がった1つの行列を「モデルの座標の行列」(1行or1列なのでふつうベクトルと呼びますが)に掛けると「画面上の座標の行列」(ベクトル)が得られます。
この間、個々の行列の中の要素を考える必要はなく、行列という1つの変数として扱うことができます。

それを実現するための原理が「行列」および「行列の乗算」です。

2
そういうことを考えなくても変形・座標変換ができるために行列はありますので、ふつう1つ1つの要素の意味を考えるということはしませんが、
「shearのような変形になる」という理解で合っています。
別の言い方をすれば、「変換前のX座標の何%を変換後のY座標に加えるか」といった意味を持ちます。
各軸のshearを適切に組み合わせると回転ができますので、回転として使うことが多いです。
平面座標と2×2回転行列から考えると分かりやすいかと思います。
4つ目は平行移動です。3次元の座標に対して3×3の行列を使うと拡縮回転shearしかできませんので、平行移動のためにもう3自由度が必要です。
別に用意してもよいのですが、1つの行列にまとまっていると何かと便利なので、うまく調整してくっつけて1つの4×4行列にまとめられました。パースペクティブ射影射影変換のときにも役立ちます。
「同次座標」あるいは「斉次座標」と呼びます。

投稿2019/05/26 05:58

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

blendegg

2019/05/26 10:12

ありがとうございました。そもそも1つ1つ値を入力するような仕組みではないのですね。 難しいですが、使っていきながら覚えるしかないですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問