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

Opengl es 如何替换OpenGL ES 2.0中的glBegin()和相关函数?,opengl-es,opengl-es-2.0,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);

我有如下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();
    }       
}
for(surfnum=0;surfnum对于(i=0;i您使用顶点缓冲区对象。NeHe教程:

本教程(大容量文本)是为Windows编写的。Android上的OpenGL ES 2的不同之处在于,您不必手动加载扩展,并且通过
egl…
函数为您提供了正确准备的OpenGL上下文

另一个可读的教程是


GL_多边形已从OpenGL-3和-ES中弃用,因为它们操作起来很麻烦,而且几乎从未使用过。此外,GL_多边形也可以被GL_三角形扇完美地替换。或者,您可以自己进行清理并将多边形几何体细分为三角形。

在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);
GLfloat-glverts[9];
glVertexPointer(3,GLU浮点,0,glverts);
glEnableClientState(GL_顶点_数组);
//用数据填充顶点位置
对于(int i=0;i<3;i++){
glverts[i*3]=。。。;
glverts[i*3+1]=。。。;
glverts[i*3+2]=。。。;
}
gldrawArray(GL_三角形_扇,0,3);

编辑:抱歉,这是针对OpenGL ES 1.1,而不是2.0的。我想你在复制它时,你的一些代码被弄乱了。你知道,你的多边形实际上只是一个三角形吗?而GL_TIRANGES在ES 2.0中是完美的。但是你必须使用顶点数组/缓冲区。请参阅datenwolf的答案。你告诉我的是在OpenGL ES 1中使用的.1但我想知道opengl es 2.0…我明白了,我的错误。我对2.0不太了解,但我在谷歌上发现了一个30秒左右的很好的演练:耶,我已经用emulator在ubuntu中完成了三角形的示例,但是只有vertexbufferarray,我也想使用法线。那么gono是如何做到的呢?@Sudhansu Gupta-这将是w在OpenGL ES 2.0中工作得非常好,就像在1.1中一样。在2.0中,您当然需要有一个着色器程序来处理顶点和碎片处理。