Как заменить glBegin() и связанные функции в OpenGL ES 2.0?
У меня есть код 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 и т.д., так как я могу заменить эти функции?
P.S.: Я делаю это в Ubuntu 10.10 через эмулятор.
Ответы
Ответ 1
Вы используете объекты буфера вершин. Учебное пособие в NeHe: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45
Учебник (объемный текст) написан для Windows. OpenGL-ES 2 на Android отличается тем, что вам не нужно загружать расширения вручную и им предоставляется правильно подготовленный контекст OpenGL с помощью функций egl...
.
Другой читаемый учебник
http://www.songho.ca/opengl/gl_vbo.html
GL_POLYGONS были оставлены с OpenGL-3 и -ES, поскольку они громоздки для работы и почти никогда не использовались. Также GL_POLYGON может быть полностью заменен GL_TRIANGLE_FAN. Или вы делаете чистую вещь и тесселируете полигональную геометрию на треугольники самостоятельно.
Ответ 2
Основной пример, чтобы нарисовать треугольник в 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