HUD that is not affected by lighting?

Started by
7 comments, last by Brigs 16 years, 1 month ago
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.
Advertisement
Do this:

glDisable(GL_LIGHTING);

//draw HUD

glEnable(GL_LIGHTING);

//draw other stuff that needs lighting
"When you die, if you get a choice between going to regular heaven or pie heaven, choose pie heaven. It might be a trick, but if it's not, mmmmmmm, boy."
How to Ask Questions the Smart Way.
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*
edit: made a topic instead.

[Edited by - Saya on March 1, 2008 11:13:06 AM]
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.
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.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

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.

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

Thanks a lot everyone! I got it to work, although I had to modify Saya's code a bit, it was great help!

This topic is closed to new replies.

Advertisement