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

21

我有下列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 等函数,那我该如何替换这些函数呢?

附注:我是在 Ubuntu 10.10 上的模拟器中进行此操作。


我认为在你复制代码的过程中,有一部分代码出现了乱码。 - Nicol Bolas
你意识到你的多边形实际上只是一个三角形吗?而且GL_TRIANGLES在ES 2.0中完全存在。但你需要使用顶点数组/缓冲区。请参考datenwolf的答案。 - Christian Rau
2个回答

11
你使用顶点缓冲对象。教程在NeHe: http://nehe.gamedev.net/tutorial/vertex_buffer_objects/22002/ 这篇教程(主要文字)是为Windows写的。在Android上,OpenGL-ES 2会自动加载扩展并通过egl...函数提供一个准备好的OpenGL上下文。
另一篇易懂的教程: http://www.songho.ca/opengl/gl_vbo.html GL_POLYGONS从OpenGL-3和-ES中被弃用,因为它们使用起来很麻烦,几乎不会被使用。 可以完美地用GL_TRIANGLE_FAN代替GL_POLYGON。或者你可以将多边形几何图形三角剖分成三角形。

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的。


1
你告诉我的是在OpenGL ES 1.1中使用的,但我想了解OpenGL ES 2.0的情况... - Sudhanshu Gupta
我明白了,我的错误。我对2.0不是很了解,但我在谷歌上找到了一个好的指南:http://www.webreference.com/programming/opengl_es/ - iforce2d
我已经在Ubuntu上使用模拟器完成了三角形的示例,但是只有顶点缓冲数组,我还想使用法线。那么我该怎么做呢? - Sudhanshu Gupta
1
@Sudhanshu Gupta - 这在OpenGL ES 2.0中完全可以正常工作,就像在1.1中一样。当然,您需要一个着色器程序来处理2.0中的顶点和片段处理。 - Brad Larson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接