• Direct3D 11のZFUNC設定

    2011年07月15日 00時02分
    前回の続き。

    さらに表示を直して行きます。

    現在はニーソが破れたような感じになっています。
    また、よく見ると上着も穴が空いています。


    理由がよく解らないので、原因を切り分けようと服と体を別々に表示してみました。

    服のみを表示
    服のみ

    体のみを表示
    体のみ


    どちらも正常に表示されています。
    ということは、Z値が正常でないため、前後関係がおかしくなっていると予想されます。

    他の部分についてはZ値が正常に働いているように見えるので
    ほんのわずかな誤差のせいではないでしょうか。

    というわけで、試しにZバッファの精度を落としてみました。

    現在は32bitにしているところを
    1textureDesc.Format = DXGI_FORMAT.DXGI_FORMAT_D32_FLOAT;


    16bitにしてみます。
    1textureDesc.Format = DXGI_FORMAT.DXGI_FORMAT_D16_UNORM;


    微妙に破れた範囲が広がりました。


    あと思いつくのはZFUNCでしょうか。
    ちょっと比較式を変更してみましょう。

    Direct3D 11のZFUNCの設定ですが、例によってSetRenderStateを呼び出してはいオッケーでは無くなっています。
    次の手順が必要です。
    1. D3D11_DEPTH_STENCIL_DESCに深度ステンシルの設定を入れる
    2. D3D11_DEPTH_STENCIL_DESCをID3D11Device.CreateDepthStencilStateに渡してID3D11DepthStencilStateを生成
    3. ID3D11DeviceContext.OMSetDepthStencilStateにID3D11DepthStencilStateをセット
    4. ID3D11DepthStencilStateは終了時にReleaseを忘れずに

    また面倒ですが、このパターンにも慣れてきました。


    これで比較式を変更出来るので、色々な設定で試してみましたが全く改善されません。
    どうもZバッファの問題ではなさそうです。

    コメントを書く

    名前
    本文
    編集用パスワード
    管理者のみ閲覧