I'm not too familiar with what features aren't supported by OpenGL ES but the way I see it you have a couple options.
A quick and easy way to get a black outline effect around an object is to scale the object up slightly and render it completely black. You can then render the regular version of the model again.
Another way would be to use an edge detection post processing effect.
Also you could use N dot V to determine how much of the surface is visible. The below link has an example on that.
http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter09.html
EDIT BY DAN:
This is a solution developed thanks to the answer and comments below. As suggested I've slightly scaled the object up, rendered it completely black (only back faces) and finally rendered the regular version of the model again.
Here's the result:

This is the drawing method:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { glClear(GL_COLOR_BUFFER_BIT); // Set matrices [self setupMatrices]; // Positions glEnableVertexAttribArray(GLKVertexAttribPosition); glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, cubePositions); // Texels glEnableVertexAttribArray(GLKVertexAttribTexCoord0); glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, cubeTexels); // Normals glEnableVertexAttribArray(GLKVertexAttribNormal); glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 0, cubeNormals); // Save the current modelview matrix in a temporary variable GLKMatrix4 mat = self.effect.transform.modelviewMatrix; self.effect.transform.modelviewMatrix = GLKMatrix4Scale(self.effect.transform.modelviewMatrix, 1.02, 1.02, 1.02); glDisable(GL_CULL_FACE); glCullFace(GL_BACK); // Set the material to black self.effect.material.ambientColor = GLKVector4Make(0.0, 0.0, 0.0, 1.0); self.effect.material.diffuseColor = GLKVector4Make(0.0, 0.0, 0.0, 1.0); // Prepare effect [self.effect prepareToDraw]; // Draw the outline glDrawArrays(GL_TRIANGLES, 0, cubeVertices); // Restore the correct material color self.effect.material.ambientColor = GLKVector4Make(251.0/255.0, 95.0/255.0, 95.0/255.0, 1.0); self.effect.material.diffuseColor = GLKVector4Make(251.0/255.0, 95.0/255.0, 95.0/255.0, 1.0); // Prepare effect [self.effect prepareToDraw]; glEnable(GL_CULL_FACE); // Restore the modeview matrix self.effect.transform.modelviewMatrix = mat; // Prepare effect [self.effect prepareToDraw]; // Draw the object glDrawArrays(GL_TRIANGLES, 0, cubeVertices); }
Before scaling the object I save the modelview matrix in a temp variable, which I restore to draw the object in the last step. Any hint to improve the code is really appreciated!
Thanks a lot guys for your help.
Cheers, DAN