Directx11でFBXSDKを使いFBXデータを読み込み描画をしようとしているのですが
オブジェクトからカメラを離すとDepthのせいで表示順がおかしくなります。
DepthのformatにはDXGI_FORMAT_D24_UNORM_S8_UINTを使っています。
よりDepthのbitの小さいformatを使うと目に見えて悪化してるのが分かるので正しく動いていると思います。
この以上大きいサイズのDepthは見つからずどうすれば良いのか分からない状況です。
Zバッファが狂って表示順序がおかしくなる
Re: Zバッファが狂って表示順序がおかしくなる
D3D11_DEPTH_STENCIL_DESC に設定してる内容と、
射影行列の作り方を見せて頂けますか?
射影行列の作り方を見せて頂けますか?
Re: Zバッファが狂って表示順序がおかしくなる
DESCの中身
射影行列
このようになっています。
//ステンシルステートの初期化(3D用)
ZeroMemory(&depthStencilDesc, sizeof(depthStencilDesc));
//ステンシルステート設定
depthStencilDesc.DepthEnable = true;
depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
depthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;
depthStencilDesc.StencilEnable = true;
depthStencilDesc.StencilReadMask = 0xFF;
depthStencilDesc.StencilWriteMask = 0xFF;
depthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
depthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
depthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
Re: Zバッファが狂って表示順序がおかしくなる
多分違うとは思いますが、一度
depthStencilDesc.StencilEnable = true;
をfalseにしてみてください。
ちょっとこのバグは予想がつかないですね…
ちなみにグラフィックスデバッガは使ってますか?
画面上部のメニューバーから、デバッグ→グラフィックス→グラフィックスデバッグの開始→(プログラムが起動)→確認したい画面まで操作したら→フレームのキャプチャをクリック→左上に出て来るフレームxxxをクリック→なんか色々チェック出来る。
チェック出来る内容は色々といじって確かめてみて下さい。
depthStencilDesc.StencilEnable = true;
をfalseにしてみてください。
ちょっとこのバグは予想がつかないですね…
ちなみにグラフィックスデバッガは使ってますか?
画面上部のメニューバーから、デバッグ→グラフィックス→グラフィックスデバッグの開始→(プログラムが起動)→確認したい画面まで操作したら→フレームのキャプチャをクリック→左上に出て来るフレームxxxをクリック→なんか色々チェック出来る。
チェック出来る内容は色々といじって確かめてみて下さい。
Re: Zバッファが狂って表示順序がおかしくなる
コード見ただけですが、0.01f(Near)~1000.0f(Far)の有効桁数6桁がfloatの精度ギリギリなのは関係ないですかね。
Re: Zバッファが狂って表示順序がおかしくなる
depthStencilDesc.StencilEnable = false;
にしても駄目でした。
Near = 1.0f;
にしましたが変化は無かったです。
fov = XM_PIDIV2;と角度を小さくしたら一応治りました。
可能性がありそうな部分をいじり続けたら治っただけなのでどうして治ったのか分かりません。
解決?はしているので解決をつけておきますが、fovを小さくしたら治った理由について教えて欲しいです。
にしても駄目でした。
Near = 1.0f;
にしましたが変化は無かったです。
fov = XM_PIDIV2;と角度を小さくしたら一応治りました。
可能性がありそうな部分をいじり続けたら治っただけなのでどうして治ったのか分かりません。
解決?はしているので解決をつけておきますが、fovを小さくしたら治った理由について教えて欲しいです。