2016-11-02 16 views
0

のためのOpenGLでの基本的な長方形の枠を描き、 満たされた矩形は、[OK]を働いているんだけど、ここで私のRectangleクラスだ境界線を描画するための簡単な方法を見つけることができません。 2D描画APIのOpenGL ESのは、満たされた図形の自動「脳卒中」の概念がありませんほとんどのとは異なり私は単純な長方形の枠を描きたいアンドロイド

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); 
     } 

    } 

答えて

0

以下は私の長方形のクラスです。あなたは塗りつぶし領域の周りにアウトラインをしたい場合は、例えば、それを自分で描画する必要がありますGL_LINES、または三角形の薄いストリップを使用しました。

+0

あなたはそれは私がカメラのプレビューの上に長方形の枠を描きたい問題だ見るだけでなく、アイデアはちょうどカメラアプリケーションでのフォーカス矩形のような単純ですが、私は彼らの領収書を配置するユーザーのためのための安全な地域を描きたいです内側とそのエリアをクロップ – user2641657

+0

問題は何ですか?あなたは(これだけではなくGL_TRIANGLESよりGL_LINESのドローでそれを置き換える、現在のドローのためのあなたの長方形の角の座標を知って、あなたはそれは違うだろうとして、線として正しいポイントをリンクするためにインデックスバッファを修正する必要があります三角形の接続性へ)。 – solidpixel

関連する問題