2016-11-02 1 views
0

Je veux juste dessiner une bordure rectangulaire simple, un rectangle rempli fonctionne bien mais je ne trouve pas un moyen facile de dessiner une bordure ici est ma classe Rectangle.dessiner la bordure rectangulaire de base dans OpenGL pour android

est Ci-dessous ma classe rectangle:

package{ 

     import java.nio.ByteBuffer; 
     import java.nio.ByteOrder; 
     import java.nio.FloatBuffer; 
     import java.nio.ShortBuffer; 
     import javax.microedition.khronos.opengles.GL10; 

     public class Rectangle { 

      private float vertices[]={ 
        -0.5f,0.5f, 0.0f, 
        -0.5f,-0.5f,0.0f, 
        0.5f,-0.5f,0.0f, 
        0.5f,0.5f,0.0f 
      }; 


     // The colors mapped to the vertices. 
     float[] colors = { 
       1f, 0f, 0f, 1f, // vertex 0 red 
       1f, 0f, 0f, 1f, // vertex 1 green 
       1f, 0f, 0f, 1f, // vertex 2 blue 
       1f, 0f, 0f, 1f, // vertex 3 magenta 
     }; 

      private short[] indices = {0,1,2,0,2,3}; 

      private FloatBuffer vertexBuffer; 
      private ShortBuffer indexBuffer; 

     // Our color buffer. 
     private FloatBuffer colorBuffer; 

     public Rectangle(){ 
      ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); 
      vbb.order(ByteOrder.nativeOrder()); 
      vertexBuffer = vbb.asFloatBuffer(); 
      vertexBuffer.put(vertices); 
      vertexBuffer.position(0); 

      ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2); 
      ibb.order(ByteOrder.nativeOrder()); 
      indexBuffer = ibb.asShortBuffer(); 
      indexBuffer.put(indices); 
      indexBuffer.position(0); 

      // float has 4 bytes, colors (RGBA) * 4 bytes 
      ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4); 
      cbb.order(ByteOrder.nativeOrder()); 
      colorBuffer = cbb.asFloatBuffer(); 
      colorBuffer.put(colors); 
      colorBuffer.position(0); 
     } 

     public void draw(GL10 gl){ 
      gl.glFrontFace(GL10.GL_CCW); 
      gl.glEnable(GL10.GL_CULL_FACE); 
      gl.glCullFace(GL10.GL_BACK); 
      gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
      gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
      // Enable the color array buffer to be used during rendering. 
      gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // NEW LINE ADDED. 

      // Point out the where the color buffer is. 
      gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer); // NEW LINE ADDED. 
      gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer); 
      gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
      gl.glDisable(GL10.GL_CULL_FACE); 
     } 

    } 

Répondre

0

Contrairement à la plupart des API de dessin 2D OpenGL ES n'a pas de concept d'un "coup" automatique pour les formes remplies. Si vous voulez un contour autour d'une zone pleine remplie, vous devrez le dessiner vous-même, par ex. en utilisant GL_LINES, ou une mince bande de triangles.

+0

bien que vous voyez c'est le problème que je veux dessiner une bordure rectangulaire sur un aperçu de la caméra, l'idée est simple comme un rectangle de focus dans l'application caméra, je veux dessiner une région sûre pour l'utilisateur de placer leur reçu à l'intérieur et recadrer cette zone – user2641657

+0

Quel est le problème? Vous connaissez les coordonnées des coins de votre rectangle pour votre tirage actuel, remplacez simplement cela par un tirage de GL_LINES plutôt que par GL_TRIANGLES (vous devrez corriger le tampon d'index pour lier les bons points en tant que lignes, car cela sera différent à la connectivité du triangle). – solidpixel