在vc中使用opengl绘图,出现一个怪问题,就是两个平面,十字交叉,使用了glEnable(GL_DEPTH_TEST);按理说z方向较深的部分应该隐藏,然而在交叉线的附近,应该隐藏的部分有一些会显示,好像前面的图形遮挡不住后面的.仅只是一部分,并且通过旋转和缩放,遮挡不住的区域会变化,各位大侠,是什么原因阿,好几天了,帮帮忙阿.

解决方案 »

  1.   

    清了
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
      

  2.   

    这个现象叫做 z-fighting。两个 face 处于相同的深度,但是由于浮点误差,导致
    某一些像素在前,某些像素在后。这是无法避免的事情。通过调整深度检测函数是无法避免的。需要通过 glPolygonOffset 来搞定
      

  3.   

    视区范围的深度范围太大,以至于在32位内无法判定深度值大小差别。
    典型的修改方法是最近的z深度值放大。例如:
    gluPerspective(...,...,10,100000000);
    //改为
    gluPerspective(...,...,100,100000000);
      

  4.   

    没开深缓吧
    加上glEnable(GL_DEPTH_TEST);