2012-01-28 34 views
1

私はAndroid用のOpenGL ES 2.0を学びたいと思っていますが、良い入門チュートリアルを見つけるのは難しいです... Thisが見つかりましたが、 "glDrawArrays" glDrawElements "...私はモデルのクラスES 1.1をロードしているコードを変換しようとしていますが、描画配列が遅すぎるかもしれないと感じています...GLES 2.0のglDrawElementsを理解する助けが必要

私は次のようにES 2.0で作業するには?

オブジェクトが格納されている方法

(罰金のようです):

private ShortBuffer SindexBuffer; 
private FloatBuffer SvertexBuffer; 
private FloatBuffer StexBuffer; 

private void initSprite() 
{ 
    float[] fcol = {1,1,1,1}; 
    float[] coords = { 
      0.5f, 0.5f, 0f, 
      -0.5f, 0.5f, 0f, 
      0.5f, -0.5f, 0f, 
      -0.5f, -0.5f, 0f 
      }; 
    short[] index = { 
      0,1,2, 
      1,3,2 
      }; 
    float[] texCoords ={ 
      0,1, 
      1,1, 
      0,0, 
      1,0 
     }; 

    //float has 4 bytes 
    ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4); 
    vbb.order(ByteOrder.nativeOrder()); 
    SvertexBuffer = vbb.asFloatBuffer(); 

    ByteBuffer tC = ByteBuffer.allocateDirect(texCoords.length * 4); 
    tC.order(ByteOrder.nativeOrder()); 
    StexBuffer = tC.asFloatBuffer(); 
    StexBuffer.put(texCoords); 
    StexBuffer.position(0); 

    //short has 2 bytes 
    ByteBuffer ibb = ByteBuffer.allocateDirect(index.length*2); 
    ibb.order(ByteOrder.nativeOrder()); 
    SindexBuffer = ibb.asShortBuffer(); 

    SvertexBuffer.put(coords); 
    SindexBuffer.put(index); 

    SvertexBuffer.position(0); 
    SindexBuffer.position(0); 

    ByteBuffer fbb = ByteBuffer.allocateDirect(fcol.length * 4); 
    fbb.order(ByteOrder.nativeOrder()); 
} 

そして、どのようにそれが描かれている(私は助けを必要とする場所です):

 public void drawSprite(GL10 gl, int tex) 
    { 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);  
     //defines the vertices we want to draw 
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, SvertexBuffer); 
     gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, StexBuffer); 

     //Draw the vertices 
     gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, SindexBuffer); 
     gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
    } 

(テクスチャ部分ISNかかわらずそれはまだ重要なことではない...)。

誰もが助けてくれる人のおかげで、最初に1.1を使った人を対象としたAndroid用のES 2.0への簡単な紹介は誰も知っていますか?

+0

Canあなたはあなたの質問が何であるかを明確にしますか?リンクしたチュートリアルを読んだことがありますか? OpenGLES 2.0に移行するには、あなたのリンクに記述されているシェーダを実装する必要があります。私はあなたがその記事を読まなければならないと思う。 glDrawElementsはOpenGL 2.0とほとんど同じです。 – Tim

答えて

1

この

float[] coords = { 
     0.5f, 0.5f, 0f,  //index 0 
     -0.5f, 0.5f, 0f,  //index 1 
     0.5f, -0.5f, 0f,  //index 2 
     -0.5f, -0.5f, 0f  //index 3 
}  

として翻訳し、あなたがポイントのこのシーケンスを使用して、そのプロットをOpenGLのために言っている:

0、1、2、1、3、2

ここでは、インデックスは短いタイプであり、各頂点は3つの浮動小数点を必要とするため、メモリを節約してください。

ありがとうございます

関連する問題