butano/varoom-3dの3D描画に関して個人的にまとめたものです。内容を信頼しないでください。
おおまかな流れ#
- 投影した頂点のリストを作る
- 投影した頂点の構成する面が画面内に入っているか、で可視面のリストを作る
- 可視面リストをZソートする
- 可視面ごとに:
- ブレゼンハムのアルゴリズム?で、面を構成する水平線分のリストを作る
- 線分ごとに、それを描画するスプライトとして情報をDMAソースのメモリに書き込む
- HDMAでHBLANKごとにスプライト情報を転送する
メモ#
- 3Dモデルを使っている箇所は意外と少ない
- コース自体はMODE7?
- 自機や敵機は普通のスプライト?
- 3Dモデルはpropだけ?
- スプライトを使う方法なので、最大スプライト数(128からその他用途分を差し引いた数)で描画限界が決まってしまうが、ハードウェアで高速に処理できる
- 3D用スプライトのタイルは1~64ドットのラインを描画できるように⊿のようなかたちに事前にまとめてあり、スプライトは描画時に対応する水平の線が画面に映るようにY座標が調整される
- この仕組みだと、テクスチャマッピングはできなさそう?
- 計算を高速に行うために割り算もLUT化してある