2

我有两个共面多边形。

我试着做。

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

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

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

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

我使用了错误的值吗?我误解了预期的结果吗?或者这应该可行,而且我可能在其他地方做错了什么?

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

4

2 回答 2

3

我没有使用过glPolygonOffset,但我只是在官方常见问题解答中阅读了它——如果你还没有看过这个,那就需要阅读。还有手册页

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

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

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

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

于 2011-03-23T04:47:14.923 回答
0

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

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

于 2011-03-23T18:36:10.627 回答