2018年02月28日

トライアングルストリップのシザリング

おお見事にカタカナのタイトルです。なんかこう賢くなった気がしますね。
This report is a scissoring for Triangle Strips on Dreamcast.

03/25追記:動画追加しました。



3DというのはカメラのXYZ座標を(0,0,0)として、カメラからの距離であるZでXとYを割ることで遠くにあるものが小さくなり遠近感が生まれるわけですが、ここで問題があります。
カメラをまたぐ、つまり(0,0,0)をまたぐポリゴンはどうなるのか、ということです。

結論:化けます。Zの絶対値は0に近づくにつれ小さくなりますが、0を跨ぐとまた大きくなります。

おまけにZもW(=Z)で割るので、カメラの後ろにあるはずが符号が反転してまたカメラの前に現れます。
まるでデルフィック領域に入ったようです。(気にしないでください)
最近のGPUはハードウェアでこれをうまく処理してくれるようです。うらやましい。しかし、ドリームキャストのPowerVR2にはこういう機能がありません。つまりソフトウェア実装する必要があります。

PowerVR2は、トライアングルストリップをサポートしています。というかほぼトライアングルストリップしかありません。なので、トライアングルストリップをカメラの前の平面でカット(シザリングというらしい)する必要があります。三回も言いました。
資料がなく途方に暮れていたのですが、こんなサイトがありました。

Patrick-Gilles Maillot
"tstrips.pdf" on that site is a scessoring algorithm for Triangle strips!
And there is C source!

このサイトの「tstrips.pdf」にトライアングルストリップのシザリング方法が紹介されていました。ありがたい!おまけにC言語での実装もありました。愛してる!
これをコピペもとい参考にしてシザリングを実装できました!ポリゴン化けない!最高!


描画関係がまとまったら動画上げます。といいつつかなりご無沙汰ですね。
でも結構まともな動画になるはずグフフ。
posted by たあし at 13:06| Comment(0) | ドリームキャスト開発 | このブログの読者になる | 更新情報をチェックする