opengl - Setting transparency color on sprite bitmap makes my non-sprite quads vanish! -


writing simple game learn opengl. in current version, render method draws geometry quads code defined colors , renders sprites. far, normal , working intended. sprites have background color auqua i've been meaning set transparent, haven't yet. moment game looks normal except fact sprites appear bounded color blue. i'm @ point want blue vanish , instead transparent, modify onload method be:

... bitmap bitmap = new bitmap("rocktexture.bmp"); // existing line bitmap.maketransparent(color.aqua);  // new line ...   

however, when run game geometry quads vanish screen! sprites remain , appear appropriately transparent.

i'm not sure why happening. here render method:

    protected override void onrenderframe(frameeventargs e)     {         base.onrenderframe(e);          gl.clear(clearbuffermask.colorbufferbit);          gl.begin(beginmode.quads);         color prevcolor = default(color);          foreach (var quad in _view.geomitrylist)         {              if (prevcolor != quad.color)             {                 gl.color4(quad.color);                 prevcolor = quad.color;             }               gl.vertex2(quad.upperleftbound.x, quad.upperleftbound.y);             gl.vertex2(quad.lowerrightbound.x, quad.upperleftbound.y);             gl.vertex2(quad.lowerrightbound.x, quad.lowerrightbound.y);             gl.vertex2(quad.upperleftbound.x, quad.lowerrightbound.y);           }           gl.color4(_unitcolor); // reset color multiplier not scew textures         prevcolor = _unitcolor;          gl.bindtexture(texturetarget.texture2d, _rocktextureid);          foreach (var sprite in _view.spritelist)         {             float ulx = sprite.upperleftbound.x;             float uly = sprite.upperleftbound.y;             float lrx = sprite.lowerrightbound.x;             float lry = sprite.lowerrightbound.y;              gl.texcoord2(0, 0); gl.vertex2(ulx, uly);             gl.texcoord2(1, 0); gl.vertex2(lrx, uly);             gl.texcoord2(1, 1); gl.vertex2(lrx, lry);             gl.texcoord2(0, 1); gl.vertex2(ulx, lry);         }          renderdashboard(ref prevcolor);           gl.end();          gl.flush();         swapbuffers();     } 

supposing you're setting alpha channel in maketransparent function, need enable blending:

protected override void onrenderframe(frameeventargs e) { base.onrenderframe(e);

    gl.clear(clearbuffermask.colorbufferbit);      gl.begin(beginmode.quads);     color prevcolor = default(color);      foreach (var quad in _view.geomitrylist)     {          if (prevcolor != quad.color)         {             gl.color4(quad.color);             prevcolor = quad.color;         }           gl.vertex2(quad.upperleftbound.x, quad.upperleftbound.y);         gl.vertex2(quad.lowerrightbound.x, quad.upperleftbound.y);         gl.vertex2(quad.lowerrightbound.x, quad.lowerrightbound.y);         gl.vertex2(quad.upperleftbound.x, quad.lowerrightbound.y);       } 

vvv

    gl.enable(gl_blend); 

^^^

    gl.blendfunc(gl_src_alpha, gl_one_minus_src_alpha);      gl.color4(_unitcolor); // reset color multiplier not scew textures     prevcolor = _unitcolor;      gl.bindtexture(texturetarget.texture2d, _rocktextureid);      foreach (var sprite in _view.spritelist)     {         float ulx = sprite.upperleftbound.x;         float uly = sprite.upperleftbound.y;         float lrx = sprite.lowerrightbound.x;         float lry = sprite.lowerrightbound.y;          gl.texcoord2(0, 0); gl.vertex2(ulx, uly);         gl.texcoord2(1, 0); gl.vertex2(lrx, uly);         gl.texcoord2(1, 1); gl.vertex2(lrx, lry);         gl.texcoord2(0, 1); gl.vertex2(ulx, lry);     }      gl.end(); // think should go here.      gl.disable(gl_blend); // enable , disable on as-needed base      renderdashboard(ref prevcolor);       gl.flush();     swapbuffers(); 

btw: you're using immediate mode calls there (glbegin(...), glvertex(...), glend()), should abandon them , use vertex arrays , vertex buffer objects instead. immediate mode deprecated, no longer available in opengl-3 , later outside compatibility profile.


Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -