2009-10-16 5 views
1

J'ai essayé de dessiner un modèle avec 197 polygones, mais j'ai d'étranges pixels noirs sur elle:pixels noirs étranges sur le modèle

alt text http://i.imagehost.org/0398/IMG_0172.png

Quand je lance le code dans le simulateur iPhone, il montre bien sans les pixels noirs, mais sur l'appareil j'ai ce problème.

Je mis perspective:

const GLfloat zNear = 0.01, zFar = 1000.0, fieldOfView = 45.0; 
GLfloat size; 
glEnable(GL_DEPTH_TEST); 
glMatrixMode(GL_PROJECTION); 
size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView)/2.0); 

CGRect rect = self.bounds; 
glFrustumf(-size, size, -size/(rect.size.width/rect.size.height), size/(rect.size.width/rect.size.height), zNear, zFar); 
glViewport(0, 0, rect.size.width, rect.size.height); 
glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); 
glClearColor(0.3f, 0.3f, 0.3f, 1.0f); 
glColor4f(0,0,0,0.5f); 
glEnable(GL_SMOOTH); 

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 

glEnableClientState(GL_VERTEX_ARRAY); 

Et dessiner (sommets du modèle, des index et Normales magasin dans les tableaux mondiaux.):

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 

[EAGLContext setCurrentContext:context]; 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 


glTranslatef(1.0, -9, -22); 

glVertexPointer(3, GL_FLOAT, 0, vertices); 

glEnableClientState(GL_NORMAL_ARRAY); 
glNormalPointer(GL_FLOAT, 0, normals); 

glDrawElements(GL_TRIANGLES, 3*192, GL_UNSIGNED_BYTE, icosahedronFaces); 

glDisableClientState(GL_NORMAL_ARRAY); 

glTranslatef(-1.0, 9, 22); 

glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

Répondre

2

Cela peut être un problème de précision en profondeur où les polygones orientés vers l'arrière piquent. Essayez d'augmenter la valeur de zNear autant que possible sans écrêter votre scène.

+0

Oui, merci. J'ai mis const GLfloat zNear = 0.1, zFar = 30.0, fieldOfView = 45.0; et maintenant tout va bien – Alexey

0

Il ressemble à un problème avec quelques-uns des Normales ne pas être exactement perpendiculaire à leur surface respective.

Essayez d'appliquer vos normales avant vous traduisez.

+0

J'utilise un vecteur normal par sommet pour un effet lisse. J'ai essayé d'utiliser 3 vecteurs normaux pour le polygone (sans lisse) et j'ai le même effet. Si je place glNormalPointer (GL_FLOAT, 0, normales); avant glTranslatef (1.0, -9, -22); ça n'aide pas – Alexey

Questions connexes