Problem with depth test

Started by
5 comments, last by tanzanite7 10 years, 1 month ago

I am loading a .obj model with assimp.
Simple models work fine, but as soon as I make something like a taurus, I get some back faces appearing.

http://imgur.com/4xKDiYX

The part where I turn depth testing on is:


	glEnable(GL_CULL_FACE);
	glCullFace(GL_BACK);
	glFrontFace(GL_CCW);
	
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL);

(I'm clearing both the colour and depth buffer)
Any guess about what I'm messing up?

(I'll post or link more code if needed later)

Advertisement

Just for clarification: Back face culling and depth buffer are two completely independent features of OpenGL.

I suspect that the two get in the way of each other in your code.

Try to disable back face culling and rely solely on the depth buffer. Is it getting better or worse?

Try reversing the winding order?

post near nad far plane values of your projection matrix. In general, you should tweek them so that f/n is close to 24 bit integer capability. Setting for example near value to 0.0001 and far value to 100000.0 will result in depth inaccuracy.


Try to disable back face culling and rely solely on the depth buffer. Is it getting better or worse?

If I turn off face culling, I get a lot more black strips. So, I'd say worse.

Try reversing the winding order?

The model was made in Blender.
If I reverse it when importing, the opposite places will appear coloured.
Can I do something like change it on the fly depending on which face is facing the light source ?

post near nad far plane values of your projection matrix. In general, you should tweek them so that f/n is close to 24 bit integer capability. Setting for example near value to 0.0001 and far value to 100000.0 will result in depth inaccuracy.


glm::mat4 p = glm::perspective(60.0f,1000*1.0f/600,0.1f,100.0f);

Much more conservative, I think.

From what I can tell the issue is the model itself. It doesn't look like the taurus should even extend that far to the right if you look at the silhouette from the top and bottom. I think you have another issue. Have you tried looking at an obj of say a car or something online for free? Check out turbosquid and see if one of those works. Seems like there is some kind of issue with the file you have.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

http://imgur.com/4xKDiYX

I do not see any OpenGL error checking - add that: https://www.opengl.org/wiki/GLAPI/glGetError

The render looks distinctively in triangle-draw order - ie, there seems to be no depth testing (the near/far range is good). So, does your framebuffer/rendertarget actually HAVE a depth buffer? glEnable(GL_DEPTH_TEST) can not have any effect when you don't have a depth buffer to begin with.

This topic is closed to new replies.

Advertisement