Как заменить glBegin () и связанные функции в OpenGL ES 2.0? - PullRequest
16 голосов
/ 20 июня 2011

У меня есть код OpenGL, подобный следующему, который я хотел бы перенести на OpenGL ES 2.0:

for (surfnum=0;surfnum < surftotal;surfnum++){
    for (i=0;i<triNum[surfnum];i++){
        glBegin(GL_POLYGON);
        glNormal3fv(triArray[surfnum][i].normpt1);
        glVertex3fv(triArray[surfnum][i].pt1);
        glNormal3fv(triArray[surfnum][i].normpt2);
        glVertex3fv(triArray[surfnum][i].pt2);
        glNormal3fv(triArray[surfnum][i].normpt3);
        glVertex3fv(triArray[surfnum][i].pt3);
        glEnd();
        glFlush();
    }       
}

В OpenGL ES 2.0 отсутствуют GL_POLYGON, glNormal3fv, glVertex3fv, glEnd, glBegin и т. Д. И т. Д.заменить эти функции?

PS: Я делаю это в Ubuntu 10.10 через эмулятор.

Ответы [ 2 ]

9 голосов
/ 20 июня 2011

Вы используете объекты Vertex Buffer. Учебное пособие в NeHe: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45

Учебник (основной текст) написан для Windows. OpenGL-ES 2 на Android отличается тем, что вам не нужно загружать расширения вручную, а функции egl... дают правильно подготовленный контекст OpenGL.

Еще один читаемый учебник http://www.songho.ca/opengl/gl_vbo.html

GL_POLYGONS были заброшены из OpenGL-3 и -ES, так как с ними трудно работать и почти никогда не используются. Также GL_POLYGON может быть полностью заменен GL_TRIANGLE_FAN. Или вы делаете чистую вещь и сами разбиваете многоугольную геометрию на треугольники.

6 голосов
/ 20 июня 2011

Базовый пример рисования треугольника в OpenGL ES:

GLfloat glverts[9];
glVertexPointer(3, GL_FLOAT, 0, glverts);
glEnableClientState(GL_VERTEX_ARRAY);

//fill in vertex positions with your data
for (int i = 0; i < 3; i++) {
  glverts[i*3]   = ...;
  glverts[i*3+1] = ...;
  glverts[i*3+2] = ...;
}

glDrawArrays(GL_TRIANGLE_FAN, 0, 3);

EDIT: извините, это для OpenGL ES 1.1, а не 2.0

...