当CallList中的物体与近平面相交时,我得到一个闪烁......,我该怎么办?
我正在使用OpenGL和SDL。
是的,它是双重缓冲的。
答案 0 :(得分:5)
听起来你正在进行z战斗。
“Z-fighting是3D渲染中的一种现象,当两个或多个基元在z缓冲区中具有相似的值时会发生这种现象,并且在共面多边形中尤为普遍。该效果会导致伪随机像素以颜色呈现一个多边形或另一个多边形以不确定的方式变化,随着场景的动画而变化,导致一个多边形“赢”z测试,然后是另一个,依此类推。 (来自wikipedia)
您可以在OpenGL FAQ。
中获取有关该问题的更多信息glPolygonOffset可能会有所帮助,但您也可以使用它来解决问题。 Tom Forsyth在他的FAQ中有一个很好的解释。注意:它谈论的是ZBIAS,但这只是DirectX的等价。
答案 1 :(得分:3)
问题是我的旋转函数有一些浮点错误,这搞砸了我的model_view矩阵。
你们当中没有人猜到,抱歉浪费你的时间。
虽然我不认为移动近平面应该被认为是解决任何问题的解决方案通常是别的错误,因为openGL确实支持与近平面的多边形交叉。
答案 2 :(得分:1)
尝试将近剪裁平面放得更远: 例如,使用gluPerspective - >第三个参数 zNear http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/perspective.html
答案 3 :(得分:0)
啊,你的意思是在附近。 :)
嗯......在同一平面上绘制多边形时,另一件事是使用glPolygonOffset
来自说明
glPolygonOffset is useful for rendering hidden-line images,
for applying decals to surfaces, and for rendering solids
with highlighted edges.