DirectX: "see through"多边形

标签 directx directx-11

我创建了一个简单的 DirectX 应用程序来渲染一个顶点场。顶点呈现如下(如果从顶部查看):

|\|\|\|\|
|\|\|\|\|

每个三角形都是这样渲染的:

1
|\
2 3

这应该意味着多边形是逆时针的并且没有被渲染,但它是。无论如何,从顶部看飞机是完美的。

然而,当从另一个层面看时,一些多边形有点透明,您可以看到它们背后的几何体。我已经强调了一些发生这种情况的地方。

我认为这是一些基本的初学者问题。我错过了什么?我的光栅器描述是这样的:

new RasterizerStateDescription
                                {
                                    CullMode = CullMode.Front,
                                    IsAntialiasedLineEnabled = true,
                                    IsMultisampleEnabled = true,
                                    IsDepthClipEnabled = true,
                                    IsFrontCounterclockwise = false,
                                    IsScissorEnabled = true,
                                    DepthBias = 1,
                                    DepthBiasClamp = 1000.0f,
                                    FillMode = FillMode.Wireframe,
                                    SlopeScaledDepthBias = 1.0f
                                };

alt text

最佳答案

这是设计使然。 FillMode.Wireframe 仅将每个三角形的边绘制为线。就这样。

第一次使用实体填充模式和深度写入以及颜色 mask (D3D11 术语中的 RenderTargetWriteMask),第二次使用深度测试(但深度写入关闭)和线框模式开启。您可能也需要深度偏差,因为线条和三角形的光栅化方式不同(并且它们的 z 可以在相同的片段位置不同)。

顺便说一句,这种技术被称为隐藏线去除。你可以查看this presentation了解更多详情。

关于DirectX: "see through"多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734386/

相关文章:

c++ - 文件加载太慢! (C++)

c++ - DirectX 窗口媒体键无响应

c# - 使用 C# 抓取 directx 程序的屏幕

c++ - IASetIndexBuffer 内存泄漏原因

c++ - CreateDepthStencilView() 失败

directx-11 - 在 directx 11 中使用实例渲染来渲染粗线

c++ - 使用 VS2012 和 DirectX 的警告(2010 年 6 月)

用于读写 DDS 纹理的 Java 库

directx-11 - DirectX 11 中的渲染

c++ - 16字节对齐问题