座標変換で苦労しました

今日は影をやりたかったのですが、オブジェクトの表示だけで終わってしまいました。
SDKのサンプルにあるroom.xの中に、ヘリコプター、車を表示させたかっただけなのですが、その表示にだいぶ苦労しました。頂点シェーダで拡散反射光を計算するために、ワールド座標系で定義したライトベクトル(平行光源なので)をローカル座標系へ変換し、シェーダへ渡していたのですが、この計算がうまくいっていなかったのが原因でした。
ベクトルA_lを、ローカル座標系からワールド座標系へ変換するには、変換行列M_wをベクトルA_lにかけるとすると、ワールド座標系からローカル座標系への変換は、ワールド座標系のベクトルA_wに、M_wの逆行列M_w_invをかけることで行えます。なので、当然ライトベクトルにM_w_invをかければローカル座標系でのライトベクトルが求まると思っていたのですが……オブジェクトを回転させても常に同じ面のみがライトに照らされているという結果となりました。おそらく、ローカル座標系で常に同じ位置にライトベクトルがセットされしまっているのでしょう。どういうこっちゃいな。
(1, 0, 0)のベクトルを、x軸方向に2, y軸方向に1平行移動したら、(3, 1, 0)のベクトルになってしまいます。(3, 1, 0)は正規化しても(1, 0, 0)になりません。ライトベクトルは方向ベクトルなので、これは誤ったベクトルだと言えます。そんなわけで、変換行列の平行移動成分を削除することでなんとかうまく表示させることができました。正直、頭の中がぐちゃぐちゃでよくわかりません。紙と鉛筆を使って頭の中を整理しながらゆっくりと考えたいと思います。
線形代数、この年になっても基本がまだわかりません(涙