如何在OpenGL ES中删除隐藏线条的线框网格?

Bla*_*ang 5 android opengl-es

我想绘制的立方体:

上面的多维数据集很容易在带有函数的OpenGL中创建glPolygonMode(GL_FRONT_AND_BACK, GL_LINE),但众所周知,OpenGL ES不包含我想要使用的函数.总之,我不想像这样绘制立方体:

我要感谢能够提供任何帮助的人们.

========================最少更新图片======================= =====

后缘比前缘略薄.有什么解决方案可以解决这个问题吗?

当前代码:

    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    GLES20.glDisable(GLES20.GL_POLYGON_OFFSET_FILL);
    // Draw edge
    GLES20.glDrawElements(GLES20.GL_LINES, lineIndices.length,
            GLES20.GL_UNSIGNED_SHORT, lineIndexBuffer);

    GLES20.glEnable(GLES20.GL_POLYGON_OFFSET_FILL);
    GLES20.glPolygonOffset(1.0f, 1.0f);
    // Apply background color and draw faces
    GLES20.glUniform4fv(mColorHandle, 1, faceColor, 0);
    GLES20.glDrawElements(GLES20.GL_TRIANGLES, triangleIndices.length,
            GLES20.GL_UNSIGNED_SHORT, triangleIndexBuffer);
Run Code Online (Sandbox Code Playgroud)

wco*_*ran 3

这是一个标准技巧(假设启用深度缓冲区):

  1. 绘制网格边缘(线)
  2. 用背景颜色填充网格多边形(以掩盖隐藏线)

由于网格边和网格面在它们相遇的地方将具有相同的 z 值,因此您需要解决z 冲突问题。最简单的方法是使用多边形偏移,使边缘“悬停”在多边形面的“上方”:

gl.disable(gl.POLYGON_OFFSET_FILL)
/* draw polygon edges */
gl.enable(gl.POLYGON_OFFSET_FILL);
gl.polygonOffset(1.0, 1.0);
/* fill polygons in background color */
Run Code Online (Sandbox Code Playgroud)

这是一个线框酒杯,说明了深度冲突问题:

在此输入图像描述

这里我使用多边形偏移解决了 z-fight 问题:

在此输入图像描述