- 2007/08/08 11:50
- 未分類
Cgシェーダがなんとなく完成した。
とりあえず、オブジェクトの回転がキャンセル出来ない問題はなんとかなりました。
よく分からなくて書いてた部分に関して、いろいろと教えてもらったので理解が深まりました。
行列ってすごいのね。
以下備忘録としてメモ。
行列の乗算は順番が関係ある。
変換をキャンセルしたいなら、直前の変換の逆行列を掛けると良い。
ある行列に逆行列を掛けると、単位行列になる。
回転行列の逆行列は、その転置行列に等しい。
転置行列とは、行の要素と列の要素を入れ替えたもの。
つまりm(i,j)がm(j,i)になるってことか。
たとえば、float3 N = mul( worldIt, normal ).xyz;において
worldItはworldInverseTranspose、normalはローカル座標の法線ベクトルであるとすると、
Nはワールド座標に変換されたnormalになる。
法線の計算には逆転置行列を使う。
そうするとtransformのキャンセルが出来る。
vertexシェーダで求めた結果をfragmentシェーダが線形補間するので、
fragmentシェーダ内でもnormalizeを忘れずに行う。
GPUの特性上、3×3の計算よりも4×4の計算のほうが速いので、
3×3にキャストしてから計算するよりも4×4で計算してからキャストしたほうが良い。
normalは基本的にはfloat3で扱う。
float4で扱うと、4つ目の値によっては結果が変わってしまう。
とりあえずこんな感じ。
間違ってたら僕の解釈ミスなので、どなたかフォローお願いします、、
↑最近ホントにフォローくれる方が増えました。感謝です!
今回の一件で、ずいぶん行列と仲良くなったかも。
転置とか逆とか、意味のわかんなかったやつらにも
意味があるんだということがわかったのがうれしい。
行列ってすごい。ホントにすごい。
目から鱗がとまらない。
ぃよす。いい機会なのでもうちょい行列の勉強します。
そういえばコレ持ってたんだおれ。忘れてた。
- Newer: Siggraph Asia
- Older: 新imac
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.taikomatsu.com/2007/08/08/%e5%82%99%e5%bf%98%e9%8c%b2-%e8%a1%8c%e3%81%a8%e3%81%8b%e5%88%97%e3%81%a8%e3%81%8b/trackback/
- Listed below are links to weblogs that reference
- [ 備忘録 ] 行とか列とか from memlog