3

是否有可能以某种方式利用深度缓冲区,使其仅在尚未绘制像素的区域上绘制?

我正在渲染简单的 1 彩色三角形:它们中的很多可能重叠,这将显着降低渲染速度,因为它渲染的像素比屏幕上可见的像素多。

这在 3D 渲染模式下很容易实现:只需启用深度测试并将三角形设置在不同的 z 位置。但这不适用于 2d 模式:我不能将每个三角形都设置在比前一个更高的位置,因为当深度缓冲区限制即将到来时,这会导致在一定高度后渲染质量不佳。

我怎样才能用着色器做到这一点?或者如果不需要着色器;没有着色器怎么办?

4

2 回答 2

0

为每个三角形分配一个多边形偏移(通过 glPolygonOffset),并启用深度测试。

于 2012-08-19T12:23:18.950 回答
0

我不能将每个三角形都设置在比前一个更高的位置,因为当深度缓冲区限制即将到来时,这会导致在一定高度后渲染质量不佳。

只有当你做错了才会发生这种情况。

24 位深度缓冲区提供 1600 万种不同的深度值供您选择。这只是正确计算值的问题。当然,确切的机制是特定于硬件的,但没有那么具体,以至于您无法获得至少 400 万个单独的层。

这是一个简单的数学问题。您正在构建一个从整数范围 [0, N] 映射到浮点范围 [0, 1] 的函数,其中 N 是三角形的数量。说,400万只是为了给你空间。

因此,任何特定三角形的 Z 值为k/N,其中 k 是该三角形的整数索引。您应该可以轻松地在着色器中执行此操作。

最糟糕的情况是,您可以制作一个 32 位浮点深度缓冲区。

于 2012-08-19T12:29:01.773 回答