Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

KevArnold

OpenGL basics - background / text

This topic is 5502 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am trying to learn OpenGL and am going through some basic functions in order to learn, I have the following function to draw a background:
void DrawBackground()
{

	glPushMatrix();									
	
	// Reset the current matrix to our identify matrix
	glLoadIdentity();								

	//Pass in our 2D ortho screen coordinates.like so (left, right, bottom, top).  The last
	// 2 parameters are the near and far planes.
	glOrtho( 0, 500, 500, 0, 0, 1 );	

	glDisable(GL_DEPTH_TEST);										

	// Bind the mask texture to our new 2D quad
	glBindTexture(GL_TEXTURE_2D,  g_Texture[0]);

	// Display a 2D quad with the scope/cross hair mask
	glBegin(GL_QUADS);
	
		// Notice that when we are in ortho mode, we use glVertex2f() to pass
		// in screen coordinates, not vertices.  This makes it incredibly easy
		// to put up 2D interface art.  It's just like doing 2D graphics.
		// The texture coordinate stay the same regardless.

		// Display the top left point of the 2D image
		glTexCoord2f(0.0f, 1.0f);	glVertex2f(0, 0);

		// Display the bottom left point of the 2D image
		glTexCoord2f(0.0f, 0.0f);	glVertex2f(0, 500);

		// Display the bottom right point of the 2D image
		glTexCoord2f(1.0f, 0.0f);	glVertex2f(500, 500);

		// Display the top right point of the 2D image
		glTexCoord2f(1.0f, 1.0f);	glVertex2f(500, 0);

	// Stop drawing 
	glEnd();	
	
	glPopMatrix();

}
 
The window is 500x500 but the image is 320x320. I was under the impression that the image size did nto matter, but this only shows part of the background image, not all of it. I also am using a function I found on this site to draw text..
void DrawText()
{
	glPushMatrix();

	glLoadIdentity();
	glTranslatef(0.0f,0.0f,-0.4f);	
	glColor3f(255.0f,0.0f,0.0f);

	glRasterPos2f(-0.18f,-0.18f);

	glPrint("Total: %d - Modifier: %f", total, modifier);

	glPopMatrix();
}

GLvoid glPrint(const char *fmt, ...)					// Custom GL "Print" Routine
{
	char		text[256];								// Holds Our String
	va_list		ap;										// Pointer To List Of Arguments

	if (fmt == NULL)									// If There's No Text
		return;											// Do Nothing

	va_start(ap, fmt);									// Parses The String For Variables
	    vsprintf(text, fmt, ap);						// And Converts Symbols To Actual Numbers
	va_end(ap);											// Results Are Stored In Text

	glPushAttrib(GL_LIST_BIT);							// Pushes The Display List Bits
	glListBase(base - 32);								// Sets The Base Character to 32
	glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);	// Draws The Display List Text
	glPopAttrib();										// Pops The Display List Bits
}
 
If you notice in DrawText I use the coordinates glRasterPos2f(-0.18f,-0.18f); to set the position to the bottom left of the window. Why isn't 0.1 or 0.9 the correct location? thanks kev [edited by - KevArnold on April 30, 2003 12:47:53 PM]

Share this post


Link to post
Share on other sites
Advertisement
quote:

The window is 500x500 but the image is 320x320.


320*320 is an invalid size for a (normal) texture, as it is not a power of two. How do you create your texture image ? Are you resizing the 320 onto something valid (eg. 256*256, or 512*512), or perhaps cutting of the excess ?

Share this post


Link to post
Share on other sites
I made the image 128x128 and am still having the same problem, it only shows the middle part of it. It is a BMP I created using paint. The image is loaded with the following function:

void CreateTexture(UINT textureArray[], LPSTR strFileName, int textureID)
{
AUX_RGBImageRec *pBitmap = NULL;

if(!strFileName) // Return from the function if no file name was passed in
return;

// We need to load the texture data, so we use a cool API that the glaux.lib offers.

pBitmap = auxDIBImageLoad(strFileName); // Load the bitmap and store the data

if(pBitmap == NULL) // If we can''t load the file, quit!
exit(0);

// Generate a texture with the associative texture ID stored in the array
glGenTextures(1, &textureArray[textureID]);

// Bind the texture to the texture arrays index and init the texture
glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);

// Build Mipmaps (builds different versions of the picture for distances - looks better)
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pBitmap->sizeX, pBitmap->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pBitmap->data);

// Lastly, we need to tell OpenGL the quality of our texture map. GL_LINEAR_MIPMAP_LINEAR
// is the smoothest. GL_LINEAR_MIPMAP_NEAREST is faster than GL_LINEAR_MIPMAP_LINEAR,
// but looks blochy and pixilated. Good for slower computers though.

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);

// Now we need to free the bitmap data that we loaded since openGL stored it as a texture

if (pBitmap) // If we loaded the bitmap
{
if (pBitmap->data) // If there is texture data
{
free(pBitmap->data); // Free the texture data, we don''t need it anymore
}

free(pBitmap); // Free the bitmap structure
}
}

thanks
kev

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!