【问题标题】:OpenGL Z-Biasing (Polygon Offset) LimitationsOpenGL Z 偏置(多边形偏移)限制
【发布时间】:2011-07-20 23:30:48
【问题描述】:

我有两个共面的多边形。

我试过了。

glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(0,1);

并且期望一个明显地“在”另一个之上。

直到大约 70-75 个单位外都是这种情况(近剪裁平面为 1,远剪裁平面为 10,000)。然后是一个大约 50 个单位的区域,其中存在 z-fighting,然后交替的多边形似乎出现在顶部。

多边形偏移是在正常 z 计算之前还是之后添加的?如果是之后,我会认为它会在所有距离上“正常工作”。

我是否使用了错误的值?我误解了预期的结果吗?还是应该这样工作,我可能在其他地方做错了什么?

我不敢尝试更大的值,因为场景中还有其他物体,如果数量足够大,它们也可以在远处“跳跃”到这些物体前面。

【问题讨论】:

    标签: opengl 3d polygon zbuffer


    【解决方案1】:

    您可以尝试将一个多边形偏移设置为正一个偏移为负,我敢打赌这会起作用。

    glPolygonOffset(0,1) 和 glPolygonOffset(0,-1)

    【讨论】:

      【解决方案2】:

      我没有使用过glPolygonOffset,但我只是在official FAQ 中阅读了它——如果您还没有看到它,则需要阅读。还有man page

      根据该参考,偏移量是在正常 Z 计算之后计算的,但在深度测试之前应用 并且在写入深度缓冲区之前。

      我能想到两个问题。首先,FAQ 建议您使用glPolygonOffset(1,1),而不是(0,1)。第一个“因子”参数乘以多边形的斜率并添加到偏移量。这对于“边缘”多边形显然很重要。如果多边形正对着相机,那没关系,但如果它是一个角度,你需要将它向前推动的量会随着角度的增加而增加。

      其次,您是否仅启用了其中一个多边形的偏移量?如果您为两者都启用了它(或忘记禁用它),那么它将应用于两个多边形,并且净效应为零。

      第三,我怀疑您的深度缓冲区太大(鉴于深度缓冲区具有双曲线比例,有利于靠近相机的对象)。我不太确定这一点,因为glPolygonOffset 应该使用深度值,而不是 Z 值(因此深度缓冲区的比例在这里不应该是一个因素)。您可能想尝试使用更短的深度缓冲区(可能是 1000),看看是否会有所不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-30
        • 2012-10-26
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 2016-09-13
        相关资源
        最近更新 更多