- OpenGLスレ Part20
931 :デフォルトの名無しさん[sage]:2014/09/01(月) 13:18:43.16 ID:PgC9Ax39 - >>930
> DirectXの行列計算順序が感覚的にしっくりくるし自然。 OpenGLとか数学の本(高校教科書含む)を一切読んだ事ないな? 左から掛ける方が不自然だ 俺が書いた>>668を1回読んでどこかコピっておけ
|
- OpenGLスレ Part20
935 :デフォルトの名無しさん[sage]:2014/09/01(月) 13:31:58.31 ID:PgC9Ax39 - y = a * x (または、f(x) = a * x)
線形代数って↑が基本だと教わってるし、x * a = y なんて書かれたら気持ち悪いし 計算途中にしか見えないよ…
|
- OpenGLスレ Part20
939 :デフォルトの名無しさん[sage]:2014/09/01(月) 14:08:37.64 ID:PgC9Ax39 - >>937
別にbがある無しはこの際どうでもいい 行列も1次変換なんだから同じだろ。何で別に考えるんだよ
|
- OpenGLスレ Part20
941 :デフォルトの名無しさん[sage]:2014/09/01(月) 15:34:52.19 ID:PgC9Ax39 - >>940
もう違和感とか曖昧な表現はいいから 具体的に右から掛けると何がおかしいか言え
|
- OpenGLスレ Part20
943 :デフォルトの名無しさん[sage]:2014/09/01(月) 15:54:41.94 ID:PgC9Ax39 - とりあえず、ここはOpenGLスレなんで行列は右から掛ける事が前提になっている
|1 2 3| |4 5 6| |7 8 9| と書いたら float m[] = { 1, 4, 7, 2, 5, 8, 3, 6, 9, }; と書く事が前提。それを見たまんま転置して書いて結果がおかしいと言われても知らん
|
- OpenGLスレ Part20
944 :デフォルトの名無しさん[sage]:2014/09/01(月) 16:01:04.18 ID:PgC9Ax39 - >>932
さらに突っ込ましてもらうけど、左から掛けたところでv'は左に書かないと駄目だ v' = v(頂点) * m(変換行列) ってなる ↓ここ見れば全部そうなっている。そして、かなり気持ち悪い… http://msdn.microsoft.com/ja-jp/library/bb206269%28v=vs.85%29.aspx
|
- OpenGLスレ Part20
950 :デフォルトの名無しさん[sage]:2014/09/01(月) 18:03:54.80 ID:PgC9Ax39 - >>945
まだ勘違いしてるようだが、行列は右から左に計算する方法しか定義されてない v(頂点) * m(変換行列) と書いたからといって、行列が左から右に計算されている訳ではない そんな計算方法は無い 計算は右から左に行なわれるから、イコールは左に書くんだ 単に掛ける方向が違うだけで、計算は必ず右から左に定義されている だったら右から掛けた方が自然に決まってる
|
- OpenGLスレ Part20
952 :デフォルトの名無しさん[sage]:2014/09/01(月) 18:38:35.47 ID:PgC9Ax39 - >>951
> イコールは右に書いてますが・・・ あっそ、何で右に書いてるか分からんが稀な例だし、変だな > これだけでしょ。右から左とか意味わからん。 駄目だ理解してないんだな… じゃぁ>>951のサイトは ・列ベクトル(OpenGL:右から掛ける) ・行ベクトル(DirectX:左から掛ける) のどっちか言ってみ?
|
- OpenGLスレ Part20
955 :デフォルトの名無しさん[sage]:2014/09/01(月) 18:54:53.70 ID:PgC9Ax39 - >>953
> イコールは左と右が等価ってことなんだから。そんなこだわり聞いたことない。 それはお前が無学だからだよ… そもそもの発端は > v(頂点) * m(変換行列) = v' の方が自然だろう・・・。 と、行列計算が左から右へ計算されているような事を言うから、 それは不自然に感じると言ってるだけだ もはや行列の定義とか無視してたら話にならんよ
|
- OpenGLスレ Part20
957 :デフォルトの名無しさん[sage]:2014/09/01(月) 19:13:08.20 ID:PgC9Ax39 - >>956
> 式の結果Xを求める > Xはこういう式で求められました 同じ事言ってるぞ…その微妙な日本語の違いを数学に持ち込むのかよ…
|
- OpenGLスレ Part20
964 :デフォルトの名無しさん[sage]:2014/09/01(月) 19:39:54.75 ID:PgC9Ax39 - >>960
わかった、もはやイコールの左右はどうでもいいや > それはわかるけど、それと、 計算は右から左しかない がどう関係あるのか意味不明。 |1 2 3| |1 2 3| * |4 5 6| (多分ずれてるはず…) |7 8 9| を計算する時、どうやって計算するか知ってんの?
|
- OpenGLスレ Part20
966 :デフォルトの名無しさん[sage]:2014/09/01(月) 19:53:38.06 ID:PgC9Ax39 - >>965
お前が散々言ってた事だろwww 1行3列×3行3列 ×の両隣が一緒なら掛けられる、覚えとけ
|
- OpenGLスレ Part20
967 :デフォルトの名無しさん[sage]:2014/09/01(月) 19:56:37.94 ID:PgC9Ax39 - で、結果は両端の数字になる
1行3列
|
- OpenGLスレ Part20
969 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:05:51.22 ID:PgC9Ax39 - >>968
専ブラじゃないのかよ… |1 2 3| |1 2 3| * |4 5 6| |7 8 9| これ > DirectXの行列計算順序が感覚的にしっくりくるし自然。 ↑お前の感覚なんてどうでもいいが、自然と言ってるのはおかしいと言ってるんだ
|
- OpenGLスレ Part20
974 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:25:58.14 ID:PgC9Ax39 - >>971
また意味不明な事を…それはOpenGLでも一緒だ M = T * R * S * V (OpenGL) V * S * R * T = M (DirectX:イコールはお前の言う右にしたよ) だから、結果は一緒なんだよ ただ、V * S は行列の定義で右から左に計算するんだ だから、数学の教科書ではそんな風に書かないから不自然と言ってるんだよ OpenGLの書き方が自然になる
|
- OpenGLスレ Part20
976 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:31:47.37 ID:PgC9Ax39 - じゃぁ、なぜDirectXはそうなってるかというと
ソースコードには、ベクトルは行ベクトルで書かざるを得ないから 全部行ベクトルにすれば、行列の表示とソース上での表示が一致するという考えがある 俺はソースと一致してないと不自然に感じる(数学的には不自然だが)と、 そう言えばいいんだよ 無理解によって、掛ける方向がどうこう言いだすからおかしな事になるんだ
|
- OpenGLスレ Part20
977 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:34:51.74 ID:PgC9Ax39 - >>975
だから、見掛け上、掛ける方向は違ってもメモリ内と結果は一緒なんだっつうの!!
|
- OpenGLスレ Part20
982 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:45:04.50 ID:PgC9Ax39 - >>979
> つかどうせD3DXMatrixMultiplyとかで自分で掛け算してんだから、どっちが逆とかないんじゃねの いや、引き数の並びの問題がある D3DXMatrixMultiply と同じOpenGLのAPIが無いから単純に比較が出来ないが、 引き数の並びが逆になるから、行列演算ライブラリを使う時は気を付ける必要がある
|
- OpenGLスレ Part20
984 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:52:54.78 ID:PgC9Ax39 - >>983
D3DXMatrixMultiply(OUT, M1, M2) > 結果は、トランスフォーム M1 の後のトランスフォーム M2 を表している (Out = M1 * M2)。 これはDirectXが左から掛ける事を前提にしてるからだ 勘違いして右から掛けると思ってる奴は D3DXMatrixMultiply(OUT, M2, M1) としてしまい、ハマる事になる もう疲れた…
|
- OpenGLスレ Part20
985 :デフォルトの名無しさん[sage]:2014/09/01(月) 20:55:35.33 ID:PgC9Ax39 - つうか、OpenGL用の行列演算ライブラリはみんな
MatrixMultiply(OUT, M2, M1) だな
|
- OpenGLスレ Part20
989 :デフォルトの名無しさん[sage]:2014/09/01(月) 21:04:05.20 ID:PgC9Ax39 - >>986
> ↑関数が逆順に結果反映されるのがプログラマ的に気持ち悪い。 違う違う…それはアフィン変換の性質の問題でOpenGL、DirectX関係無い >>987 それは同じだが、結局ずっと左から掛けてるだけだぞ まとめて左から、1個ずつ左からの違いだ
|