2011-06-28 5 views
0

ceci est mon opengl-es 2.0 code:Problème lors du portage de OpenGL 1.1 OpenGL-ES 2.0

{ 
    for (surfnum=0;surfnum<surftotal;surfnum++){ 
     for (i=0;i<triNum[surfnum];i++){ 
      GLfloat *Vertices[] = { triArray[surfnum][i].normpt1, triArray[surfnum][i].normpt2,triArray[surfnum][i].normpt3}; 
      glGenBuffers(1, &ui32Vbo); 
      glBindBuffer(GL_ARRAY_BUFFER, ui32Vbo); 
      unsigned int uiSize = 3 * (sizeof(GLfloat) * 1); 
      glBufferData(GL_ARRAY_BUFFER, uiSize,*Vertices, GL_STATIC_DRAW); 
     } 
    } 
} 
for(int i = 0; i < 80000; ++i) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    int i32Location = glGetUniformLocation(uiProgramObject, "projmatrix"); 
    glUniformMatrix4fv(i32Location, 1, GL_FALSE, pfIdentity); 
    glEnableVertexAttribArray(VERTEX_ARRAY); 
    glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    glDrawArrays(GL_TRIANGLES, 0,i); 
    eglSwapBuffers(eglDisplay, eglSurface); 
} 

Ceci est mon code opengl-es 2.0. Je travaillais sur opengl 1.1 dans lequel j'ai pu montrer les données de forme de surface d'iso.

Ceci est mon Opengl 1.1 Code:

void drawTriangle() 
{ 
    int surfnum, i; 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0,0.6,0.1); 


    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(); 
      glutSwapBuffers(); 
     } 
    } 
} 

Je ne reçois pas le même résultat que je recevais en opengl, en opengl-es 2.0 aussi un avertissement

venir comme: libegl : utiliser le logiciel de secours;
sortie se produit très lentement
ici la sortie sort de la fenêtre

Si vous voulez une autre information me demander.

+0

Cela semble correct pour une matrice de projection orthographique. Que se passe-t-il et que prévoyez-vous? – Mikola

Répondre

1

Votre code n'a aucun sens. Créez-vous réellement un objet tampon pour chaque triangle?

{ 
    for (surfnum=0;surfnum<surftotal;surfnum++){ 
     for (i=0;i<triNum[surfnum];i++){ 
      GLfloat *Vertices[] = { triArray[surfnum][i].normpt1, triArray[surfnum][i].normpt2,triArray[surfnum][i].normpt3}; 
      glGenBuffers(1, &ui32Vbo); 
      glBindBuffer(GL_ARRAY_BUFFER, ui32Vbo); 
      unsigned int uiSize = 3 * (sizeof(GLfloat) * 1); 
     glBufferData(GL_ARRAY_BUFFER, uiSize,*Vertices, GL_STATIC_DRAW); 
     } 
    } 
} 

Eh bien, vous ne faites même pas cela, parce que vous avez seulement un objet tampon pour chaque ensemble de 3 flottants, ce qui n'est même pas un triangle complet. Je peux seulement supposer que c'est une position de sommet. Vous continuez à appeler glGenBuffers au milieu de cette boucle, donc il va consciencieusement générer un autre objet tampon. La création d'un trop grand nombre d'objets tampon peut être la raison pour laquelle vous êtes confronté à des retards logiciels.

De plus, normpt1 ne contient-il pas la position normale, pas la position?

Et puis il y a ceci:

for(int i = 0; i < 80000; ++i) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    int i32Location = glGetUniformLocation(uiProgramObject, "projmatrix"); 
    glUniformMatrix4fv(i32Location, 1, GL_FALSE, pfIdentity); 
    glEnableVertexAttribArray(VERTEX_ARRAY); 
    glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    glDrawArrays(GL_TRIANGLES, 0,i); 
    eglSwapBuffers(eglDisplay, eglSurface); 
} 

D'abord, vous ne l'avez pas glBindBuffer votre objet tampon. Oui, je sais que c'est encore lié d'avant, mais c'est toujours bon d'être explicite à propos de ces choses. Le plus important est: glDrawArrays(GL_TRIANGLES, 0,i);? Est-ce que i l'indice de tableau? Le troisième paramètre doit être le nombre de sommets à dessiner. Et GL_TRIANGLES échouera à moins que cette valeur ne soit divisible par 3.

Mais cela n'a pas d'importance, puisque l'objet tampon que vous avez créé en dernier a seulement assez de place pour 1 vertex. Donc c'est impossible à partir de.

+0

Merci, je comprends mes erreurs et je vais travailler sur ce point. –

Questions connexes