我有两个共面的多边形。
我尝试做。
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(0,1);
并期望其中一个明显“位于”另一个之上。
这种情况直到大约 70-75 个单位之外(近剪裁平面为 1,远剪裁平面为 10,000)。然后是一个大约 50 个单位的区域,其中存在深度战斗,然后替代多边形似乎出现在顶部。
多边形偏移是在正常 z 计算之前还是之后添加的?如果是在之后,我会认为它在所有距离上都会“正常工作”。
我使用了错误的价值观吗?我是否误解了预期结果?或者这应该有效,而我可能在其他地方做错了什么?
我不敢尝试更大的值,因为场景中还有其他对象,如果数量足够大,它们也可以在很远的距离“跳”到这些对象前面。
我没用过glPolygonOffset
,但我刚刚在官方常见问题解答 http://www.opengl.org/resources/faq/technical/polygonoffset.htm——如果您还没有看过这篇文章,请务必阅读。还有man page http://www.opengl.org/sdk/docs/man/xhtml/glPolygonOffset.xml.
根据该参考,计算偏移量after正常的 Z 计算,但应用了before深度测试以及写入深度缓冲区之前。
我能想到两个问题。首先,常见问题解答建议您使用glPolygonOffset(1,1)
, not (0,1)
。第一个“因子”参数乘以多边形的斜率并添加到偏移量。这对于“边缘”多边形显然很重要。如果多边形面向相机,则没关系,但如果它成一定角度,则需要将其向前推动的量随着角度的增加而增加。
其次,您是否仅启用其中一个多边形的偏移?如果您为两者启用了它(或忘记禁用它),那么它将应用于两个多边形,并且净效果为零。
第三,我怀疑您的深度缓冲区太大(鉴于深度缓冲区具有双曲线尺度,有利于靠近相机的物体)。鉴于此,我对此不太确定glPolygonOffset
应该使用深度值,而不是 Z 值(因此深度缓冲区的比例不应该成为这里的一个因素)。您可能想尝试使用更短的深度缓冲区(可能是 1000),看看是否会产生影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)