Strange depth/blending in OpenGL drawing models -


i'm having strange problem cannot figure out life of me. i'm loading obj model file maya , rendering opengl environment. appears go , in independent model viewer, display correctly. however, when loaded game environment (with strange projection matrix have no control over), model not display correctly.

the vertices seem in correct place in rotating model gives correct sense of 3d. however, depending on depth function, different parts of model appear (incorrectly).

for example, in model of person, when person walking left right (e.g. right side of model visible camera); if depth function set gl_lequal, unable see right arm of person when in front of torso. however, when mode set gl_less, able see left arm through torso. 1 of things easier see pictures here go:

gl_less or gl_notequal:

enter image description here enter image description here

gl_lequal or gl_always:

enter image description here enter image description here enter image description here

it should noted nothing displayed other depth function. in first picture of gl_lequal series, can see left arm partially obscured torso when shouldn't be.

here code used render model:

gl.gldisable(gl.gl_blend);     gl.glmatrixmode(gl.gl_modelview);     gl.glpushmatrix();     gl.glloadidentity();      layertextureshader.updateshader(gl, projection, disparitytop, disparitybottom, fieldmask, 1);      // gl.gldepthfunc(gl.gl_never); // 512     // gl.gldepthfunc(gl.gl_less); // 513     // gl.gldepthfunc(gl.gl_equal); // 514     // gl.gldepthfunc(gl.gl_lequal); // 515     // gl.gldepthfunc(gl.gl_greater); // 516     // gl.gldepthfunc(gl.gl_notequal); // 517     // gl.gldepthfunc(gl.gl_gequal); // 518     // gl.gldepthfunc(gl.gl_always); // 519     gl.gldepthfunc(currentglcomparison);      gl.glenable(gl.gl_depth_test);     gl.glclear(gl.gl_depth_buffer_bit);      gl.gldepthmask(true);     gl.gldepthrange(0, 0.01);      gl.glbindbuffer(gl.gl_array_buffer, getvertexbufferobject());     gl.glbufferdata(gl.gl_array_buffer, getnoofvertices() * 3 * 4, getvertices(), gl.gl_stream_draw);     gl.glbindbuffer(gl.gl_array_buffer, 0);      gl.glbindbuffer(gl.gl_array_buffer, gettexcoordbufferobject());     gl.glbufferdata(gl.gl_array_buffer, getnoofvertices() * 2 * 4, gettexcoords(), gl.gl_stream_draw);     gl.glbindbuffer(gl.gl_array_buffer, 0);      gl.glbindbuffer(gl.gl_element_array_buffer, getindicesbufferobject());     gl.glbufferdata(gl.gl_element_array_buffer, getnoofindices() * 4, getindices(), gl.gl_stream_draw);     gl.glbindbuffer(gl.gl_element_array_buffer, 0);      gl.glbindbuffer(gl.gl_array_buffer, getcolorbufferobject());     gl.glbufferdata(gl.gl_array_buffer, getnoofvertices() * 4 * 4, getcolors(), gl.gl_stream_draw);     gl.glbindbuffer(gl.gl_array_buffer, 0);      gl.glenable(gl.gl_texture_2d);     gl.glactivetexture(gl.gl_texture0);      layertextureshader.use(gl);     gl.glenableclientstate(gl.gl_vertex_array);     gl.glbindbuffer(gl.gl_array_buffer, getvertexbufferobject());     gl.glvertexpointer(3, gl.gl_float, 0, 0);      gl.glenableclientstate(gl.gl_color_array);     gl.glbindbuffer(gl.gl_array_buffer, mask ? getmaskcolorbufferobject() : getcolorbufferobject());     gl.glcolorpointer(4, gl.gl_float, 0, 0);      gl.glclientactivetexture(gl.gl_texture0);      gl.glenableclientstate(gl.gl_texture_coord_array);     gl.glbindbuffer(gl.gl_array_buffer, gettexcoordbufferobject());     gl.gltexcoordpointer(2, gl.gl_float, 0, 0);      gl.glbindbuffer(gl.gl_element_array_buffer, getindicesbufferobject());      final int count = getnoofindices();     gl.gldrawelements(gl.gl_triangles, count, gl.gl_unsigned_int, 0);      gl.glbindbuffer(gl.gl_element_array_buffer, 0);     gl.glbindbuffer(gl.gl_array_buffer, 0);      gl.gldisableclientstate(gl.gl_vertex_array);     gl.gldisableclientstate(gl.gl_color_array);     gl.gldisableclientstate(gl.gl_texture_coord_array);      layertextureshader.release(gl);      gl.gldisable(gl.gl_texture_2d);      gl.gldisable(gl.gl_depth_test);     gl.glenable(gl.gl_blend);     gl.glpopmatrix(); 

thanks help, has had me stumped quite few days now.

looks projection matrix set this:

gluperspective ( 90, (glint)width/ (glint)height, 0.0, 200.0 );   

see mistake ? - 0.0 value not acceptable. positive values use 0.01 instead of 0.0 third argument.


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -