Sign in to follow this  
Brigs

OpenGL HUD that is not affected by lighting?

Recommended Posts

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.

Share this post


Link to post
Share on other sites
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*

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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();
}


Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Thanks a lot everyone! I got it to work, although I had to modify Saya's code a bit, it was great help!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this