Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 防止共面多边形上的Z战斗?_Opengl_Rendering_Render_Polygon - Fatal编程技术网

Opengl 防止共面多边形上的Z战斗?

Opengl 防止共面多边形上的Z战斗?,opengl,rendering,render,polygon,Opengl,Rendering,Render,Polygon,我正在尝试在基于OpenGL的渲染器中处理共面多边形上的Z战斗。由于遗留问题,我在很多方面都束手无策。由于数据流在旧系统中的工作方式,渲染器主要必须是短视的 用户可以在任意位置绘制几何体,我没有真正的方法来检测他们何时决定重叠两个多边形。使用glPolygonOffset,我需要知道如何在多边形或其他多边形上进行偏移。我还相当肯定,玩投影矩阵不会有什么帮助,因为Z格斗是由数据的共面性质导致的舍入误差造成的。打开和关闭深度写入也不是一个真正的选项,因为我不知道在渲染循环期间何时会发生此问题 那么建

我正在尝试在基于OpenGL的渲染器中处理共面多边形上的Z战斗。由于遗留问题,我在很多方面都束手无策。由于数据流在旧系统中的工作方式,渲染器主要必须是短视的

用户可以在任意位置绘制几何体,我没有真正的方法来检测他们何时决定重叠两个多边形。使用glPolygonOffset,我需要知道如何在多边形或其他多边形上进行偏移。我还相当肯定,玩投影矩阵不会有什么帮助,因为Z格斗是由数据的共面性质导致的舍入误差造成的。打开和关闭深度写入也不是一个真正的选项,因为我不知道在渲染循环期间何时会发生此问题


那么建议呢

红皮书中有一些。例如,您可以首先将所有共面多边形渲染到模具缓冲区中,而无需触摸颜色缓冲区(即
glColorMask(0,0,0,0)
),但需要执行Z测试和更新深度缓冲区。然后打开深度测试和深度写入,启用颜色写入和模具测试,并按多边形的分层顺序渲染多边形;模具缓冲区将应用早期深度测试准备的结果。

在每个多边形上随机设置一个小的
glPolygonOffset()
怎么样?如果不知道何时何地会发生这种情况,你就不能挥动魔杖来修复它。所有实际修复最终都取决于能够对渲染器本身进行某种控制。请尝试glDepthFunc(GL_LEQUAL)或glDepthFunc(GL_LESS)。我完全控制渲染器,而不是数据/细分器。我想我差不多是索尔,但问也没什么坏处。哦,我正在使用glDepthFunc(GL_LEQUAL)