
dirGames-Lで ATI社製のグラフィックカードでよく起こる、「sawtooth(のこぎり歯)」現象について議論があったので自分的まとめ。そもそも、以前書いたように 一部のATIではDirectXの depthBufferDepthが24でなく16しか使えないみたいなことがあるみたいだけど。 ともかくとして、現象は、どっちのポリゴンが前か後ろか分からないから適当に描画されて「のこぎり歯」になってしまう。何でかというと
- モデリングした時点でポリゴンがほぼ同位置に重なっている。
- 表示深度が浅い(depthBufferDepth = 16)。
「重なる」というのが微妙な表現だけど、例えば 10m離れたポリゴン通しでも、数キロメートルのスケールで離れて見れば「重なってる」ということに。 で、回避策は
- 表示深度を深くする(depthBufferDepth = 24)。
- カメラの描画開始位置を深くする(hitherを20か40まで大きくする)。
- ついでにカメラの描画終了位置も最低限に(yonを小さく)。
- モデルの階層関係を変更する。
- モデリングし直す。
カメラの hitherとyonで解決できるのは知らなかった。今度問題があれば試してみよう。それはそうと、最近「Dir3d-l」でShockwave3D語ってるのが盛り上がってる様子。 僕らみたいに、未だに日本で Shockwave3Dやってる人たちには期待させるような内容だね。ともかく次期バージョンで、新Shockwave3Dが登場することを期待してボチボチやっていこう。