2015-06-01 12 views
5

Il cubo voglio disegnare: Come disegnare una mesh wireframe con le linee nascoste rimosse in OpenGL ES?

Il cubo di cui sopra è abbastanza facile da creare in OpenGL con funzione di glPolygonMode(GL_FRONT_AND_BACK, GL_LINE), ma è noto che OpenGL ES non include la funzione che voglio usare. In una parola, non voglio disegnare un cubo come questo:

Vorrei ringraziare le persone che potrebbero fornire qualsiasi aiuto.

======================== immagine aggiornamento almeno =================== =========

Il bordo posteriore è un po 'più sottile del bordo anteriore. C'è qualche soluzione per risolvere questo problema?

codice attuale:

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); 
+0

Perché non disegnare direttamente le linee? Usa semplicemente 'GL_LINES' per il tipo primitivo. –

+0

Perché voglio disegnare un modello 3D e il cubo avrà un angolo diverso da vedere. –

+0

Anche se usi GL_LINES puoi vederlo in tutti gli angoli, ed è anche un modello 3d. – VivekParamasivam

risposta

3

Ecco un trucco standard (assume depth buffer abilitato):

  1. Disegnare le maglie bordi (linee)
  2. Riempire la maglia poligoni con il colore di sfondo (per coprire le linee nascoste)

Poiché i bordi della mesh e le facce della mesh avranno gli stessi valori z in cui si incontrano, è necessario risolvere il problema z-fighting. Il modo più semplice esso uso poligono compensata modo che i bordi "oscillano" poco "sopra" il poligono facce:

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

Ecco un bicchiere wireframe che illustra il problema z-combattimento:

enter image description here

Qui risolto il problema z-combattimento utilizzando Offset poligono:

enter image description here

+0

Grazie mille !!! –

+0

@BlaiseWang Dovremmo cambiare il titolo in "Come faccio a disegnare una mesh wireframe con le linee nascoste rimosse in OpenGL ES?" E se ti piace la risposta, potresti inversiderla :) – wcochran

+0

Quando provo la tua soluzione al problema del cubo del disegno. Ho scoperto che funzionava, ma puoi vedere che i bordi posteriori sono più sottili dei bordi frontali nella minima immagine che ho postato. Avete qualche soluzione per risolvere il nuovo problema. –

Problemi correlati