さらに表示を直して行きます。
現在はニーソが破れたような感じになっています。
また、よく見ると上着も穴が空いています。
理由がよく解らないので、原因を切り分けようと服と体を別々に表示してみました。
服のみを表示
体のみを表示
どちらも正常に表示されています。
ということは、Z値が正常でないため、前後関係がおかしくなっていると予想されます。
他の部分についてはZ値が正常に働いているように見えるので
ほんのわずかな誤差のせいではないでしょうか。
というわけで、試しにZバッファの精度を落としてみました。
現在は32bitにしているところを
1 | textureDesc.Format = DXGI_FORMAT.DXGI_FORMAT_D32_FLOAT; |
---|
16bitにしてみます。
1 | textureDesc.Format = DXGI_FORMAT.DXGI_FORMAT_D16_UNORM; |
---|
微妙に破れた範囲が広がりました。
あと思いつくのはZFUNCでしょうか。
ちょっと比較式を変更してみましょう。
Direct3D 11のZFUNCの設定ですが、例によってSetRenderStateを呼び出してはいオッケーでは無くなっています。
次の手順が必要です。
- D3D11_DEPTH_STENCIL_DESCに深度ステンシルの設定を入れる
- D3D11_DEPTH_STENCIL_DESCをID3D11Device.CreateDepthStencilStateに渡してID3D11DepthStencilStateを生成
- ID3D11DeviceContext.OMSetDepthStencilStateにID3D11DepthStencilStateをセット
- ID3D11DepthStencilStateは終了時にReleaseを忘れずに
また面倒ですが、このパターンにも慣れてきました。
これで比較式を変更出来るので、色々な設定で試してみましたが全く改善されません。
どうもZバッファの問題ではなさそうです。