三次元変換行列(3)
2008/05/06 18:48 - AS3.0
今回からいよいよ自作三次元変換行列クラスの設計段階に入ります。
名称は、 前回の Point3D を踏襲して、Matrix3D にしておきますか。 flash.geom.Matrix の三次元拡張クラスってな感じで。
まずは一番重要な行列の設計から。
1列目 | 2列目 | 3列目 | 4列目 | |
---|---|---|---|---|
1行目 | a | b | c | tx |
2行目 | d | e | f | ty |
3行目 | g | h | i | tz |
4行目 | 0 | 0 | 0 | 1 |
1列目 | 2列目 | 3列目 | 4列目 | |
---|---|---|---|---|
1行目 | a | d | g | 0 |
2行目 | b | e | h | 0 |
3行目 | c | f | i | 0 |
4行目 | tx | ty | tz | 1 |
右に行って下に行く flash.geom.Matrix 型と、下に行って右に行く書籍「CGのための線形代数」型。
さてどっちにするべきか。
まぁ内部での計算順序の問題に過ぎないんで、どっちでもイイっちゃあイイんですが。
ちなみに Papervision3D の三次元変換行列のクラスを見てみると前者を採用しています。
FIVe3D の三次元変換行列のクラスを見てみると、行列定義のコメント記述はありませんが、concat() メソッドの計算から察するに、これまた前者を採用しています。
今まで読んできた本でも、どちらかというと前者が多数派でしたし、今のところメインの参考書にしようと考えている「コンピュータゲームの数学」という本も前者。
そんなわけで長いものに巻かれて、前者を行列の形態として採用します。
なお、「コンピュータゲームの数学」にはけっこうな量の誤植があるとのことですが、私にとって必要な部分はノーエラーのようなので無問題。