我有一个主要场景,我有一个想在其中渲染的场景。我想使用早期的深度测试进行性能,因此我想将所有东西一起渲染在一起,从头到尾。但是我不能将每个场景隔离到深度缓冲区的一半,因为这将限制其精度。我可以渲染背景,清除深度缓冲区并渲染前场景,这将正确绘制,但会引起不必要的透支。额外的帧缓冲区加闪电同样会引起透支。
理想的解决方案(如下所述)是使用gldepthrange在深度缓冲液内建立多个区域,从而使正常的渲染能够以两次通行的前到后方顺序进行,以最大程度地减少透支,同时防止交叉遮挡。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
我有一个主要场景,我有一个想在其中渲染的场景。我想使用早期的深度测试进行性能,因此我想将所有东西一起渲染在一起,从头到尾。但是我不能将每个场景隔离到深度缓冲区的一半,因为这将限制其精度。
通常,您有24位的深度缓冲区精度。将其分为一半的收益... 23位精确度。不知何故,我宁愿怀疑这将是一个主要问题。如果是这样,您总是可以通过为前覆盖层提供更少的空间来回收。说,只有深度范围的5%。
这就是FPS游戏的" ViewModel"(玩家的手和枪)覆盖的方式。做专业人士做的事情。
我可以以某种方式呈现覆盖场景,将深度缓冲区中的任何值更改为-1不是1,然后渲染主要场景?
-1不是有效的深度缓冲区值。所以我假装你说0。
是的,您可以做到。您可以将场景呈现到深度质地。然后渲染一个从纹理中获得深度值的全屏幕四边形,将其与1进行比较,如果不是完全1.0,则将其写入0而不是1.0。
但是这种练习的全部要点是性能,是吗?考虑到我刚才说的工作必须发生的事情。
GPU在第一个场景完成完成渲染之前,无法渲染全屏四轮。这将意味着整个渲染管道必须完全冲洗,浪费宝贵的时间。
与glDepthRange
解决方案相比,这可能会更慢。