Zバッファが狂って表示順序がおかしくなる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
葡萄

Zバッファが狂って表示順序がおかしくなる

#1

投稿記事 by 葡萄 » 6年前

Directx11でFBXSDKを使いFBXデータを読み込み描画をしようとしているのですが
オブジェクトからカメラを離すとDepthのせいで表示順がおかしくなります。
DepthのformatにはDXGI_FORMAT_D24_UNORM_S8_UINTを使っています。
よりDepthのbitの小さいformatを使うと目に見えて悪化してるのが分かるので正しく動いていると思います。
この以上大きいサイズのDepthは見つからずどうすれば良いのか分からない状況です。
画像
画像

葡萄

Re: Zバッファが狂って表示順序がおかしくなる

#2

投稿記事 by 葡萄 » 6年前

Unityちゃんを外部にあげてしまったのでライセンス
© UTJ/UCL

manntera
記事: 13
登録日時: 9年前

Re: Zバッファが狂って表示順序がおかしくなる

#3

投稿記事 by manntera » 6年前

D3D11_DEPTH_STENCIL_DESC に設定してる内容と、
射影行列の作り方を見せて頂けますか?

葡萄

Re: Zバッファが狂って表示順序がおかしくなる

#4

投稿記事 by 葡萄 » 6年前

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;
射影行列

コード:

FLOAT fov = XM_PIDIV4;
FLOAT Asspect = Viewport.Width / Viewport.Height; //Viewportの中身は正しいウィンドウ幅が入っている
FLOAT Near = 0.01f, Far = 1000.0f;
 XMMatrixTranspose(XMMatrixPerspectiveFovLH(fov, Asspect, Near, Far));
このようになっています。

manntera
記事: 13
登録日時: 9年前

Re: Zバッファが狂って表示順序がおかしくなる

#5

投稿記事 by manntera » 6年前

多分違うとは思いますが、一度
depthStencilDesc.StencilEnable = true;
をfalseにしてみてください。
ちょっとこのバグは予想がつかないですね…

ちなみにグラフィックスデバッガは使ってますか?
画面上部のメニューバーから、デバッグ→グラフィックス→グラフィックスデバッグの開始→(プログラムが起動)→確認したい画面まで操作したら→フレームのキャプチャをクリック→左上に出て来るフレームxxxをクリック→なんか色々チェック出来る。

チェック出来る内容は色々といじって確かめてみて下さい。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Zバッファが狂って表示順序がおかしくなる

#6

投稿記事 by ISLe » 6年前

コード見ただけですが、0.01f(Near)~1000.0f(Far)の有効桁数6桁がfloatの精度ギリギリなのは関係ないですかね。

葡萄

Re: Zバッファが狂って表示順序がおかしくなる

#7

投稿記事 by 葡萄 » 6年前

depthStencilDesc.StencilEnable = false;
にしても駄目でした。
Near = 1.0f;
にしましたが変化は無かったです。

fov = XM_PIDIV2;と角度を小さくしたら一応治りました。
可能性がありそうな部分をいじり続けたら治っただけなのでどうして治ったのか分かりません。
解決?はしているので解決をつけておきますが、fovを小さくしたら治った理由について教えて欲しいです。

返信

“C言語何でも質問掲示板” へ戻る