# OpenGL Why does OpenGL not show some of my faces?

This topic is 2549 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

After implementing my isometric view sometime back, rendering objects has gotten really weird. I assume it has to do with my code in my INIT function and the viewpoint, but I'm not entirely sure. I've been experimenting all day with it by trying to comment out lines and such with no success.

Here is what happens:

Here is what it looks like in Blender:

This is probably a really simple error to fix (I probably just need to drop in another glEnable, although Ive tried almost everything) so I feel bad for posting about it.

Here is the relevant code in my INIT function:
 void init() { // Set projection transform glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, -10.0f, 10.0f); // Set view transform glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //lighting glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); //player lights glEnable(GL_LIGHT1); //sun light glEnable(GL_NORMALIZE); } 

And here is my main:
 int main( int agrc, char* args[] ) { SDL_Init(SDL_INIT_EVERYTHING); SDL_Surface* screen=SDL_SetVideoMode(600,400,32, SDL_SWSURFACE|SDL_OPENGL ); bool running = true; Uint32 start; SDL_Event event; init(); while(running) { start=SDL_GetTicks(); while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: running = false; break; } } display(); SDL_GL_SwapBuffers(); angle = angle + .1; if(angle > 360) angle = 0; if(1000/30>(SDL_GetTicks()-start)) SDL_Delay(1000/30>(SDL_GetTicks()-start)); } SDL_FreeSurface(screen); SDL_Quit(); return 0; } 

##### Share on other sites
Probably need to convert to triangles in blender.

##### Share on other sites

Probably need to convert to triangles in blender.

Its not just files exported from Blender that create the problem. When I draw a cube it has the exact same problems.

##### Share on other sites
It's possible that you're not being consistent with whether faces are drawn clockwise or counterclockwise, meaning that some of the faces are "backwards," that is, facing away from the camera. If you have backface culling enabled or any of various lighting setups, those faces will not be rendered or will appear black.

##### Share on other sites

It's possible that you're not being consistent with whether faces are drawn clockwise or counterclockwise, meaning that some of the faces are "backwards," that is, facing away from the camera. If you have backface culling enabled or any of various lighting setups, those faces will not be rendered or will appear black.

I commented out all of my lighting code and nothing changed. I doubt it has to do with that.

I should also add that when I keep a cube in a static position then the order of events in which I render the different faces of the cube matters. For example, if I render the vertices for the bottom face first then it will eventually be overlayed by the top face once I render it.

##### Share on other sites

[quote name='cowsarenotevil' timestamp='1324184682' post='4894942']
It's possible that you're not being consistent with whether faces are drawn clockwise or counterclockwise, meaning that some of the faces are "backwards," that is, facing away from the camera. If you have backface culling enabled or any of various lighting setups, those faces will not be rendered or will appear black.

I commented out all of my lighting code and nothing changed. I doubt it has to do with that.[/quote]

Did you try doing glDisable(GL_CULL_FACE) right before rendering the faces as well, just to be sure?

I should also add that when I keep a cube in a static position then the order of events in which I render the different faces of the cube matters. For example, if I render the vertices for the bottom face first then it will eventually be overlayed by the top face once I render it.
[/quote]

I see you have glEnable(GL_DEPTH_TEST) in your init code, so my guess is that either your depth buffer is not setup correctly (e.g. zNear and zFar are not set correctly, among other things) or depth testing is being disabled before you actually render the faces somehow.

##### Share on other sites

[quote name='cowsarenotevil' timestamp='1324184682' post='4894942']
It's possible that you're not being consistent with whether faces are drawn clockwise or counterclockwise, meaning that some of the faces are "backwards," that is, facing away from the camera. If you have backface culling enabled or any of various lighting setups, those faces will not be rendered or will appear black.

I commented out all of my lighting code and nothing changed. I doubt it has to do with that.
[/quote]
That is probably because lighting has nothing to do with anything.

Each quad is made up of 2 triangles, one facing towards the camera and one facing away.
You have not maintained consistent winding when converting the triangle fans, or you have not correctly extracted both faces from each fan.

Each face is stored as a “triangle fan”.

Fans are converted as follows:
Assume your fan has 5 points 0 1 2 3 4.
The 3 triangles in this fan/face are:
0 1 2
0 2 3
0 3 4

Your example material is composed entirely of quads, which means 4 points 0 1 2 3.
And 2 triangles:
0 1 2
0 2 3

L. Spiro

##### Share on other sites

That is probably because lighting has nothing to do with anything.

Each quad is made up of 2 triangles, one facing towards the camera and one facing away.
You have not maintained consistent winding when converting the triangle fans, or you have not correctly extracted both faces from each fan.

Each face is stored as a “triangle fan”.

Fans are converted as follows:
Assume your fan has 5 points 0 1 2 3 4.
The 3 triangles in this fan/face are:
0 1 2
0 2 3
0 3 4

Your example material is composed entirely of quads, which means 4 points 0 1 2 3.
And 2 triangles:
0 1 2
0 2 3

L. Spiro

The only thing is that I haven't complicated my code enough for it to completely bug out like this. The code I used for the isometric view had a comment under it that said "Warning, models might not work correctly under this set up", so I assume that it has to be a problem with that. I posted the code to my modelview matrix and the viewing code in the OP.

EDIT:
I commented out the isometric view part and the problem persists.

##### Share on other sites

Probably need to convert to triangles in blender.

I have to agree with this. I just recently had the same issue as you and then realized that I had forgotten to convert my quads to triangles in blender.

Its not just files exported from Blender that create the problem. When I draw a cube it has the exact same problems.

How do you define your cube? 6 quads with 8 vertices, 6 quads with 24 vertices, 12 triangles with 8 vertices, 12 triangles with 36 vertices? More importantly, you need to list your display function. The problem may lie in there, but we don't know.

##### Share on other sites

Probably need to convert to triangles in blender.

I have to agree with this. I just recently had the same issue as you and then realized that I had forgotten to convert my quads to triangles in blender.

Its not just files exported from Blender that create the problem. When I draw a cube it has the exact same problems.

How do you define your cube? 6 quads with 8 vertices, 6 quads with 24 vertices, 12 triangles with 8 vertices, 12 triangles with 36 vertices? More importantly, you need to list your display function. The problem may lie in there, but we don't know.
[/quote]

It probably has to do with Blender now that I think about it... how do you make it so that it doesn't export triangles only? After some testing I realized that it only displays the triangles and not any quads.

Here is my display function even though I'm pretty sure its blender now:
 void display(){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //Add ambient light GLfloat ambientColor[] = {0.2f, 0.2f, 0.2f, 1.0f}; //Color (0.2, 0.2, 0.2) glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor); //Add sun light GLfloat lightColor1[] = {0.3f, 0.3f, 0.5f, 1.0f}; //sunlight color GLfloat lightPos1[] = {-0.5f, 1.0f, 0.5f, 0.0f}; //Coming from the direction glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor1); glLightfv(GL_LIGHT1, GL_POSITION, lightPos1); drawSmiley(0, 2, 0); /* drawStone(0, 0, 0); drawStone(1, 0, 0); drawSand(2, 0, 0); drawStone(0, 0, 1); drawPlank(0, 0, 2); drawDirt(0, 0, 3); drawGrass(0, 1, 3); */ glFlush(); } 

[size="7"]EDIT:
[size=7]Got it to work, thanks. Now I need to add lighting and texture surfaces somehow...

1. 1
2. 2
3. 3
Rutin
23
4. 4
5. 5
khawk
14

• 9
• 11
• 11
• 23
• 12
• ### Forum Statistics

• Total Topics
633653
• Total Posts
3013164
×