2011-01-19 108 views
2

我创建了一个呈现顶点字段的简单DirectX应用程序。顶点渲染这样的(如果从顶部看):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

回答

0

原来我刚刚没有设置深度模板缓冲区。好吧。

3

这是由设计。 FillMode.Wireframe只绘制每个三角形的边作为线。就这样。

用第一遍填充模式和深度写入并使用颜色遮罩(D3D11术语中的RenderTargetWriteMask),第二遍使用深度测试(但深度写入)和线框模式。您可能也需要深度偏差,因为线条和三角形没有以相同的方式进行光栅化(并且它们的z可以在相同的片段位置处有所不同)。

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

+0

这与FillMode.Solid相同。我认为我只是缺少一个深度模板缓冲区。但是,无论如何感谢信息。 – 2011-01-19 13:44:47