OpenGl和闪烁

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGl和闪烁相关的知识,希望对你有一定的参考价值。

当CallList中的对象与近平面相交时,我得到一个闪烁......,我该怎么办?

我使用OpenGL和SDL。

是的它是双缓冲的。

答案

听起来你正在进行z战斗。

“Z-fighting是3D渲染中的一种现象,当两个或多个基元在z缓冲区中具有相似的值时会发生这种现象,并且在共面多边形中尤为普遍。这种效果会导致伪随机像素以一个多边形的颜色呈现或者以一种非确定性的方式,随着场景的动画而变化,导致一个多边形“赢”z测试,然后是另一个,依此类推。 (来自wikipedia

您可以在OpenGL FAQ中获得有关该问题的更多信息。

glPolygonOffset可能会有所帮助,但您也可以使用它来解决问题。 Tom Forsyth在他的FAQ中有一个很好的解释注意:它谈到ZBIAS,但这只是DirectX等效。

另一答案

问题是我的旋转函数有一些浮点错误,这搞砸了我的model_view矩阵。

没有人能猜到,抱歉浪费你的时间。

虽然我不认为移动近平面应该被认为是解决任何类型的问题通常是别的错误,因为openGL确实支持与近平面的多边形交叉。

另一答案

尝试将近剪裁平面放得更远:例如使用gluPerspective - >第三个参数zNear http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/perspective.html

另一答案

啊,你的意思是近飞机。 :)

嗯...在同一平面上绘制多边形时的另一件事是使用glPolygonOffset

从描述

  glPolygonOffset is useful for rendering hidden-line images,
  for applying decals to surfaces, and for rendering solids
  with highlighted edges.

以上是关于OpenGl和闪烁的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 闪烁/损坏,窗口调整大小和 DWM 处于活动状态

OpenGl和闪烁

覆盖javascript以消除闪烁

如何在opengl中以特定频率闪烁(轻弹)2d对象

OpenGL奇怪的渲染行为(闪烁的面孔)

sh HBA和驱动器固件闪烁片段