2010-06-25 5 views
1

Voici mon problème. Je dessine une boîte en utilisant un GL_TRIANGLE_STRIP. Il n'y a pas de texture en jeu, pas de matériel et pas de shaders. Je suis juste en train de rendre le triangle coloré.Problème d'évanouissement de couleur indésirable dans OpenGL sur une bande triangulaire. Vous voulez obtenir une couleur uniforme sur le triangle

Vous pouvez voir à quoi il ressemble ici: Fail box

Mais comme vous pouvez le voir, je l'ai un problème de couleur claire décoloration. Il n'y a pas d'éclairage activé non plus.

Voici le code que j'utilise pour init et rendre la boîte.

//here init code 
for(list<Particle*>::iterator p = this->shapes[this->activeShape].particles.begin(); 
       p != this->shapes[this->activeShape].particles.end(); p++) 
      { 
       float yValue = 20.0f; 

       this->vertexArray[this->activeShape][current].Position.x = (*p)->x0.x; 
       this->vertexArray[this->activeShape][current].Position.y = -yValue; 
       this->vertexArray[this->activeShape][current].Position.z = (*p)->x0.y; 


       this->vertexArray[this->activeShape][current + listSize].Position.x = (*p)->x0.x; 
       this->vertexArray[this->activeShape][current + listSize].Position.y = yValue; 
       this->vertexArray[this->activeShape][current + listSize].Position.z = (*p)->x0.y; 

       current++; 
      } 


     // render code 
       glFrontFace(GL_CW); 
       glEnable(GL_BLEND); 

       glVertexPointer(3, GL_FLOAT, sizeof(LsmVertexColor), &this->vertexArray[this->activeShape][0].Position); 
       glEnableClientState(GL_VERTEX_ARRAY); 

       glColor4f(SCULPTY_R, SCULPTY_G, SCULPTY_B, SCULPTY_A); 

       glDrawElements(GL_TRIANGLE_STRIP, 20, GL_UNSIGNED_SHORT, &this->indexArray[this->activeShape][0]); 
       glDrawElements(GL_TRIANGLE_STRIP, 20, GL_UNSIGNED_SHORT, &this->indexArray[this->activeShape][22]); 
       glDrawElements(GL_TRIANGLE_STRIP, 10, GL_UNSIGNED_SHORT, &this->indexArray[this->activeShape][44]); 
       glDrawElements(GL_TRIANGLE_STRIP, 10, GL_UNSIGNED_SHORT, &this->indexArray[this->activeShape][54]); 

J'utilise OpenGL ES 1.1 (Je sais que je ne suis pas mis à jour) et le programme est en cours d'exécution sur iPhone/iPad.

+0

il me semble que vos sommets sont éteints, êtes-vous sûr que vous êtes en boucle droite? quelle est ta foulée? – slf

Répondre

0

Essayez d'ajouter:

glDisable(GL_LIGHTING); 

pour vous assurer qu'il est vraiment pas d'éclairage, même si par défaut.

+0

Je l'ai fait, et voici la liste de toutes les choses que je désactive avant le rendu \t glDisable (GL_TEXTURE_2D); \t glDisable (GL_LIGHTING); \t glDisable (GL_COLOR_MATERIAL); \t glDisable (GL_BLEND); \t glShadeModel (GL_FLAT); \t glDisable (GL_FOG); Fondamentalement tout ce que OpengGL peut faire: D – Pencrace

+0

BTW, il ne fonctionne toujours pas au cas où il ne était pas clair – Pencrace

0

J'ai oublié de mentionner que j'utilise le moteur Sio2 Engine. Je suis allé hardstyle et j'ai accroché l'init openGL entier et l'ai refait moi-même. Pour une raison quelconque, l'un des appels glEnable (GL_TEXTURE_2D) faisait apparaître l'effet étrange. Je ne peux malheureusement pas expliquer pourquoi, mais si vous utilisez Sio2 Engine et finissez avec un effet étrange d'évanouissement de couleur ... alors vérifiez s'il est résolu en commentant l'un des deux appels pour activer GL_TEXTURE_2D dans le code du moteur.

Je me réjouis de toute explication, je n'ai pas le temps d'aller plus loin et de le trouver moi-même.

+0

Petite précision, pas besoin de commenter quoi que ce soit, j'ai vérifié je peu plus (car il n'est jamais bon d'enlever un peu quelque chose qui fonctionne). Donc, si vous restituez quelque chose sans utiliser le pipeline du moteur, ne le restituez pas après l'appel de sio2ResourceRender(). – Pencrace