1

私はOpenGLを学び、三角ストリップを使用して成功した2D描画システムを作成することができました。ジオメトリのバッチ処理をテストするためにパーティクルジェネレータを作成しました。すべてがうまく機能し、iPhone5で60fpsで30k以上の頂点をレンダリングできます。縮退三角形を使用してパーティクルを接続し、一度に描画します。私が達成しようとしているのは、GPUに送信されるデータの量を1/3削減するため、縮退三角形を使用しないバッチレンダリングです。

次のコードで2つのスプライトを描画するために、三角形でglDrawElementsを使用しようとしています。

//the vertices for the square (2d)
GLfloat square[] = {
    50, 50,  //bottom left
    100, 50, //bottom right
    50, 100, //top left
    100, 100, //top right

    150, 200,  //bottom left
    200, 150, //bottom right
    150, 200, //top left
    200, 200 //top right
};

//texture coords
GLfloat tex[] = {
    0,0,
    1,0,
    0,1,
    1,1,

    0,0,
    1,0,
    0,1,
    1,1
};

GLubyte indices[] =
{
    0,2,3, 
    0,3,1,

    0,2,3,
    0,3,1
};

//actual drawing code
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, GL_FALSE, 0, square);
glVertexAttribPointer(ATTRIB_TEX, 2, GL_FLOAT, GL_FALSE, 0, tex);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, image);

glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, indices);

このコードは最初の画像を問題なく描画しますが、2番目の画像は歪んでいます。私はオンラインで探していましたが、これを正しく機能させる方法を理解できませんでした。

4

1 に答える 1

0

まず、現在、両方のクワッドに同じインデックスを使用しているため、2番目の画像はまったく表示されないはずです。

2番目のクワッドの頂点データが混乱していることを除けば、ポイントは(150, 200)2回あり、最初のクワッドはおそらくです(150, 150)

于 2013-03-21T01:15:15.227 に答える