2011-06-20 7 views
14

tengo código de OpenGL como la siguiente que me gustaría a puerto para OpenGL ES 2.0:¿Cómo reemplazo glBegin() y funciones relacionadas en 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 carece GL_POLYGON, glNormal3fv, glVertex3fv, glEnd, glBegin, etc., por lo que ¿Cómo se sustituye estas funciones?

P.S .: Estoy haciendo esto en Ubuntu 10.10 a través de un emulador.

+0

Creo que algunos de su código se distorsionados si se ha copiado pulg. –

+0

¿Se da cuenta de que su polígono es en realidad solo un triángulo? Y GL_TIRANGLES está perfectamente presente en ES 2.0. Pero tendrá que usar arreglos/búferes de vértices. Ver la respuesta de datenwolf para esto. –

Respuesta

9

Utiliza objetos de búfer de vértice. Tutorial en NeHe: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45

El tutorial (el texto masivo) está escrito para Windows. OpenGL-ES 2 en Android difiere en que no tiene que cargar extensiones manualmente y se le da un contexto OpenGL preparado adecuadamente por las funciones egl....

otro tutorial es legible http://www.songho.ca/opengl/gl_vbo.html

GL_POLYGONS han sido abandonados desde OpenGL-3 y -es ya que son engorrosos para trabajar con y casi nunca se utiliza. También GL_POLYGON puede ser reemplazado perfectamente por GL_TRIANGLE_FAN. O puede hacer lo limpio y teselar la geometría poligonal en triángulos usted mismo.

5

Un ejemplo básico, para dibujar un triángulo en 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: Lo siento, esto es para OpenGL ES 1.1, no 2.0

+1

Lo que me está diciendo se usa en opengl es 1.1 pero quiero saber si opengl-es 2.0 ... –

+0

Veo, mi error. No sé mucho sobre 2.0, pero encontré un buen tutorial en unos 30 segundos en google: http://www.webreference.com/programming/opengl_es/ – iforce2d

+0

Yaah ya he hecho el ejemplo de triángulo en Ubuntu con emulador pero solo hay vertexbufferarray y quiero usar normales también. entonces, ¿cómo voy a hacer eso? –