Как нарисовать сетку wireframe со скрытыми линиями, удаленными в 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); 

Вот стандартный трюк (предполагается, что буфер глубины включен):

  1. Нарисуйте ребра (линии) сетки
  2. Заполните сетчатые многоугольники цветом фона (чтобы скрыть скрытые линии)

Поскольку ребра сетки и грани сетки будут иметь одинаковые значения z, где они встречаются, вам необходимо решить проблему z-war . Самый простой способ использования полигона смещения, чтобы края «зависали» немного «над» гранями многоугольника:

 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 */ 

Вот винный каркас, который иллюстрирует проблему z-war:

Введите описание изображения здесь

Здесь я решил проблему z-war с использованием polygon offset:

Введите описание изображения здесь