如何在OpenGL ES 2.0中替换glBegin()和相关函数?

时间:2011-06-20 07:49:10

标签: opengl-es 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中这样做。

2 个答案:

答案 0 :(得分:9)

您使用顶点缓冲区对象。 NeHe教程:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45

教程(批量文本)是为Windows编写的。 Android上的OpenGL-ES 2的不同之处在于您不必手动加载扩展,并且egl...函数为OpenGL上下文提供了适当的准备。

另一个可读的教程是 http://www.songho.ca/opengl/gl_vbo.html

GL_POLYGONS已被弃用于OpenGL-3和-ES,因为它们使用起来很麻烦,而且几乎从未使用过。 GL_POLYGON也可以被GL_TRIANGLE_FAN完美取代。或者你做了干净的事情并自己将多边形几何图形化为三角形。

答案 1 :(得分:6)

一个基本的例子,在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);
编辑:抱歉,这适用于OpenGL ES 1.1,而不是2.0