Prueba de profundidad en GLKit

Soy nuevo en OpenGL / GLKit y tengo problemas con las testings de profundidad. La siguiente image muestra una publicación con cinco haces que la intersectan. Todos se encuentran en el medio (dentro de la publicación), pero como puede ver, las partes de las vigas que están destinadas a ser oscurecidas aún son visibles. Parpadean como locos y sucede lo mismo cuando cambio la vista para que los haces se superpongan en la pantalla. Si no lo consigo (GL_CULL_FACE), entonces sucede dentro de cada forma, es decir, la cara posterior de los polígonos posteriores se dibuja e interfiere con la cara frontal del polígono frontal.

introduzca la descripción de la imagen aquí

Aquí están los fragments de código que creo que son relevantes, he omitido las cosas sobre cómo configurar los vértices y el ángulo de visión. Esperemos que alguien reconozca el problema y hay una bala de plata por ahí.

En mi controller de vista

- (void)viewDidLoad { [super viewDidLoad]; self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; GLKView *view = (GLKView *)self.view; view.context = self.context; view.drawableDepthFormat = GLKViewDrawableDepthFormat24; [self setupGL]; } - (void)setupGL { [EAGLContext setCurrentContext:self.context]; self.effect = [[GLKBaseEffect alloc] init]; self.effect.lightModelAmbientColor = GLKVector4Make(0.5, 0.5, 0.5, 1); self.effect.colorMaterialEnabled = GL_TRUE; self.effect.light0.enabled = GL_TRUE; self.effect.light0.position = GLKVector4Make(2, 4, -5, 1); self.effect.material.shininess = 10.0; self.effect.material.specularColor = GLKVector4Make(0.5, 0.5, 1, 1); self.effect.lightingType = GLKLightingTypePerPixel; glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glDepthFunc(GL_LEQUAL); } - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { glClearColor(0.2, 0.2, 0.2, 0.5); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); [self.effect prepareToDraw]; [beams makeObjectsPerformSelector:@selector(draw)]; [post draw]; } 

En Beam.m

 -(void) draw { self.effect.material.shininess = 15.0; glEnableVertexAttribArray(GLKVertexAttribPosition); glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, triangleVertices); glEnableVertexAttribArray(GLKVertexAttribColor); glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, 0, triangleColours); glEnableVertexAttribArray(GLKVertexAttribNormal); glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 0, triangleNormals); glDrawArrays(GL_TRIANGLES, 0, 48); glDisableVertexAttribArray(GLKVertexAttribPosition); glDisableVertexAttribArray(GLKVertexAttribColor); glDisableVertexAttribArray(GLKVertexAttribNormal); } 

Admito totalmente que soy muy nuevo e inexperto en esto, así que estoy bastante abierto a las críticas constructivas si he estructurado la aplicación mal.

Saludos, Craig

La solución vino de HannesSAK (http://www.iphonedevsdk.com/forum/iphone-sdk-development/5239-opengl-es-problem-depthbuffer-culling.html), parece que el ajuste zNear como 0.0f fue mi problema. Lo cambié a 1.0f y la image se representó correctamente.

 self.effect.transform.projectionMatrix = GLKMatrix4MakePerspective(0.125*RADIANS, 2.0/3.0, 1.0f, 50.0f);