OpenGL ES 2.0 текстуры правильный путь - PullRequest
1 голос
/ 03 января 2012

Я новичок в opengl es 2.0 на ios, я пытаюсь создать несколько объектов (сделанных из вершин) и назначить каждому разную текстуру, я обнаружил, что могу сделать это, связав, затем рисуя в функции рендеринга следующим образом:

inside render ():

    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);

    glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
    glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 3));

    glVertexAttribPointer(_texCoordSlot, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 7));    

    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, _Texture1);
    glUniform1i(_textureUniform, 0); 

    glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);

Я повторяю приведенный выше код для каждой текстуры, меняя только _Texture1 в glBindTexture на _Texture2 и т. Д.

перед всеми настройками iТекстуры выглядят следующим образом:

     glGenTextures(1, &texName);
     glBindTexture(GL_TEXTURE_2D, texName);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);

Я хотел бы знать, как правильно задавать текстуры для разных вершин, нужно ли это вообще делать внутри функции рендеринга?

кажется, что это неправильный способ сделать это.

(вот полный код, если я не объяснил себя полностью: http://codetidy.com/1709/)

1 Ответ

2 голосов
/ 04 января 2012

Вы делаете это правильно. OpenGL - это «конечный автомат», поэтому вы должны установить состояние линии рендеринга для каждого нарисованного кадра. По сути, все ваши рисунки будут выполнены внутри вашей функции рендеринга.

...