gpt4 book ai didi

DirectX11 线框 z-fighting 帮助(或者为什么 D3D11_RASTERIZER_DESC.DepthBias 是 INT?)

转载 作者:行者123 更新时间:2023-12-02 21:21:33 24 4
gpt4 key购买 nike

我尝试使用 DirectX 11 中光栅化器状态的 DepthBias 属性 (D3D11_RASTERIZER_DESC) 来帮助解决在线框中渲染时发生的 z-fighting模式超过实心多边形(线框覆盖),并且似乎将其设置为任何值都不会改变结果。但我注意到一些奇怪的事情......该值被定义为 INT 而不是 FLOAT。这对我来说没有意义,但它仍然没有按预期工作。如果该值是需要在着色器管道中解释为 UNORMINT,我们如何正确设置该值?

这就是我所做的:

  1. 渲染所有几何体
  2. 设置光栅器以在线框中渲染
  3. 再次渲染所有几何体

我可以清楚地看到线框叠加,但 z-fighting 太可怕了。我尝试将 DepthBias 设置为许多不同的值,例如 0.0000010.11101000 以及所有等价的减号,仍然没有结果...显然,我知道当将 float 转换为整数时,所有小数都会被删除...meh ?

D3D11_RASTERIZER_DESC RasterizerDesc;
ZeroMemory(&RasterizerDesc, sizeof(RasterizerDesc));
RasterizerDesc.FillMode = D3D11_FILL_WIREFRAME;
RasterizerDesc.CullMode = D3D11_CULL_BACK;
RasterizerDesc.FrontCounterClockwise = FALSE;
RasterizerDesc.DepthBias = ???
RasterizerDesc.SlopeScaledDepthBias = 0.0f;
RasterizerDesc.DepthBiasClamp = 0.0f;
RasterizerDesc.DepthClipEnable = TRUE;
RasterizerDesc.ScissorEnable = FALSE;
RasterizerDesc.MultisampleEnable = FALSE;
RasterizerDesc.AntialiasedLineEnable = FALSE;

有人知道如何正确设置DepthBias吗?或者也许这是 DirectX 中的一个错误(我对此表示怀疑),或者也许有比使用 DepthBias 更好的方法来实现此目的?

谢谢!

最佳答案

http://msdn.microsoft.com/en-us/library/windows/desktop/cc308048(v=vs.85).aspx

根据深度缓冲区是 UNORM 还是浮点,数字的含义会有所不同。在大多数情况下,您只是寻找能够消除深度冲突的最小可能值,而不是任何特定值。小值是小偏差,大值是大偏差,但这如何等同于数字移位取决于深度缓冲区的格式。

对于您尝试过的值,任何小于 1 的值都会四舍五入到零并且没有任何效果。 1、10、1000 可能根本不足以解决问题。在 D24 UNORM 深度缓冲区的情况下,公式建议深度偏差 1000 将偏移深度:1000 * (1/2^24),等于 0.0000596,这在 z 缓冲方面并不是非常显着的偏移。/p>

100,000 或 1,000,000 的大值是否可以解决深度冲突?

关于DirectX11 线框 z-fighting 帮助(或者为什么 D3D11_RASTERIZER_DESC.DepthBias 是 INT?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com