HUD that is not affected by lighting?
Hi,
I'm new to OpenGL, I've just been going through NeHe's great tutorials, I've got my basic 3d world and now I want to make a HUD for example a health bar or something. I've managed to load a bitmap and use masking, however using this method the hud is affected by lighting in the world, moving around the hud gets either light up or very dark. Is there any way to display the HUD separate from the 3d world? Sort of like how DirectDraw worked in good old DX7? ;)
Thanks.
Do this:
glDisable(GL_LIGHTING);
//draw HUD
glEnable(GL_LIGHTING);
//draw other stuff that needs lighting
glDisable(GL_LIGHTING);
//draw HUD
glEnable(GL_LIGHTING);
//draw other stuff that needs lighting
Of course, without using the stoneage technology Nehe teaches (GL_LIGHTING, ugh [headshake]), you would simply switch to the HUD shader before drawing the HUD...
*sigh*
*sigh*
Hmm seems the way Im doing it, the HUD is an actual object in 3D space so it can get obscured by other objects, is there a way to make it independent of 3D space? I heard about Ortho view or something, will that work to separate it from 3d space?
thanks.
thanks.
Quote:Original post by Brigs
I heard about Ortho view or something, will that work to separate it from 3d space?
Yes, it will. I believe NeHe has a tutorial on that as well.
Here's a way of doing it:
/** * Switch to 2D mode for GUI rendering */void Renderer::enable2D( ) { GLint iViewport[4]; /** Get a copy of the viewport */ glGetIntegerv( GL_VIEWPORT, iViewport ); /** Save a copy of the projection matrix so that we can restore it when it's time to do 3D rendering again. */ glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); /** Set up the orthographic projection */ glOrtho( iViewport[0], iViewport[0]+iViewport[2], iViewport[1]+iViewport[3], iViewport[1], -1, 1 ); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadIdentity(); /** Make sure depth testing and lighting are disabled for 2D rendering until we are finished rendering in 2D */ glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_LIGHTING_BIT ); glDisable( GL_DEPTH_TEST ); glDisable( GL_LIGHTING ); }/** * Go back to 3D mode */void Renderer::disable2D() { glPopAttrib(); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glMatrixMode( GL_MODELVIEW ); glPopMatrix(); }
You guys need to buy the GL books by dave astle. You could then figure out these questions for yourself.
If you don't want lighting, disable it. If you don't want shit drawing over your HUD, disable depth testing.
And btw, masking is really really dumb. I started off doing it as well, but its so much better to grab a targa image, or something that supports an alpha layer. Plus it doesnt require a 2nd wasted texture.
If you don't want lighting, disable it. If you don't want shit drawing over your HUD, disable depth testing.
And btw, masking is really really dumb. I started off doing it as well, but its so much better to grab a targa image, or something that supports an alpha layer. Plus it doesnt require a 2nd wasted texture.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement