是否有可能以某种方式利用深度缓冲区,使其仅绘制那些尚未绘制像素的区域?
我正在渲染简单的1个彩色三角形:它们中的很多可能会重叠,这会显着降低渲染速度,因为它渲染的像素比屏幕上可见的更多。
这在3D渲染模式下很容易实现:只需启用深度测试并在不同的z位置设置三角形。但是这在2d模式下不起作用:我不能将每个三角形设置在比前一个更高的位置上,因为当深度缓冲区限制到达时,这会导致在某个高度之后渲染质量不佳。
如何使用着色器执行此操作?或者如果不需要着色器;没有着色器怎么做?
答案 0 :(得分:0)
为每个三角形指定一个多边形偏移(通过glPolygonOffset),并启用深度测试。
答案 1 :(得分:0)
我不能将每个三角形设置在比前一个更高的位置上,因为当深度缓冲区限制到来时,这将导致在某个高度之后渲染质量不佳。
只有做错了才会发生这种情况。
24位深度缓冲区提供1600万种不同的深度值供您选择。这只是一个正确计算价值的问题。当然,确切的机制是特定于硬件的,但没有那么具体,以至于你无法获得至少400万个单独的层。
这是一个简单的数学问题。您正在构建一个函数,该函数从整数范围[0,N]映射到浮点范围[0,1],其中N是三角形的数量。说,400万只是给你空间。
因此,任何pariticular三角形的Z值都是k/N
,其中k是该三角形的整数索引。您应该可以在着色器中轻松完成此操作。
最糟糕的是,你可以制作一个32位浮点深度缓冲区。