1ピクセル単位で描画するソフトウェアレンダリングに挑戦しています。
動作確認
マウスでドラッグすると回転します。
「FULL」ボタンを押すとフルスクリーンになり、もう一度押すと戻ります。
データについて
勤め先で開発している某3D洋服作成ソフトのデータを拝借しました。
生地の裏表を別カウントして2万ポリゴンもあるため、Graphicsクラスで1枚ずつ描画するのは無理があります。
説明
zソートが1オブジェクトまたは1ポリゴン単位で前後関係をチェックするのに対し、デプスバッファは1ピクセル単位でチェックします。通常のピクセル色バッファと同じサイズでzバッファを確保し、以前のz値と比較して近い場合のみ色値とz値を書き込みます。
drawTriangle等で描画するとの比べて演算量が膨大になりますので、CPUに負荷がかかる処理をピクセループの外へ追い出すような工夫が必要になります。
今後の展開
どうもデプスバッファの精度が悪いようで、近接メッシュがあると滲むことがあります。恐らくポリゴン内部を線形補間で埋める部分に誤差が発生していると思われるため、原因を追跡していきます。