Jump to content
  • Advertisement
Sign in to follow this  
Morgul

Texture Mapping

This topic is 4873 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'm not very good when it comes to texture mapping. I have tried before, and failed. Can someone please tell me what is wrong with this code?
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D, bmptextures[0]);
glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(32.0f, 128.0f,  1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(240.0f, 128.0f,  1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(240.0f, 336.0f,  1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(32.0f, 336.0f,  1.0f);
glEnd();
Just in case the problem isn't in there, I am using NeHe's bmp loader, however I have changed some things to make it have arguments so that you can choose which file to load and where it goes, etc. If the problem isn't in the above code, ask and I will post the function for loading bitmaps that I have. Thanks in advance

Share this post


Link to post
Share on other sites
Advertisement
Nothing's wrong with that code you posted. It's to do with something else. Post the code you're using to create the texture. Enclose it in <source> ... </source> tags to put it in a nice source code box. Also, did you remember to call glEnable(GL_TEXTURE_2D)?

Share this post


Link to post
Share on other sites
Alright then...

The bitmap loader (all parts):


AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image
{
FILE *File=NULL; // File Handle

if (!Filename) // Make Sure A Filename Was Given
{
return NULL; // If Not Return NULL
}

File=fopen(Filename,"r"); // Check To See If The File Exists

if (File) // Does The File Exist?
{
fclose(File); // Close The Handle
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}

return NULL; // If Load Failed Return NULL
}

int LoadBMP(char *filename, GLuint &texid) // Load Bitmaps And Convert To Textures
{
int Status=FALSE; // Status Indicator

AUX_RGBImageRec *TextureImage[1]; // Create Storage Space For The Texture

memset(TextureImage,0,sizeof(void *)*1); // Set The Pointer To NULL

// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
if (TextureImage[0]=LoadBMP(filename))
{
Status=TRUE; // Set The Status To TRUE

glGenTextures(1, &texid); // Create The Texture

// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, texid);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}

if (TextureImage[0]) // If Texture Exists
{
if (TextureImage[0]->data) // If Texture Image Exists
{
free(TextureImage[0]->data); // Free The Texture Image Memory
}

free(TextureImage[0]); // Free The Image Structure
}

return Status; // Return The Status
}

(Spaces are a little screwed on the above code but im not going to fix them)


My initialization of the texture thing:

GLuint bmptextures[1];


I know that the bmp is in the right place and so on.

Oh yah, for no reason at all but just in case:


if (!LoadBMP("Data/Textures/niobraracross.BMP", bmptextures[0]))
{
return FALSE; // If Texture Didn't Load Return FALSE
}

Share this post


Link to post
Share on other sites
It is part of the project and I have it here:


#include <stdlib.h>
#include <windows.h> // Header File For Windows
#include <stdio.h> // Header File For Standard Input / Output
#include <stdarg.h> // Header File For Variable Argument Routines
#include <string.h> // Header File For String Management
#include <gl\gl.h> // Header File For The OpenGL32 Library
#include <gl\glu.h> // Header File For The GLu32 Library
#include <gl\glext.h>
#include "glaux.h"
#include "hdandn.hpp"
#include "definitions.hpp"

Share this post


Link to post
Share on other sites
Thanks to the nice people on this forum, i now know one thing.....

I believe you need to add "glDisable(GL_TEXTURE_2D);" to the end of your drawing code, otherwise your display will be all messed up.... that problem bothered me for over a week untill i was told to add this code.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
i don't believe you're passing the correct type to your bmp loader.


int LoadBMP(char *filename, GLuint &texid)

GLuint bmptextures[1];

if (!LoadBMP("Data/Textures/niobraracross.BMP", bmptextures[0]))


bmptextures[0] is GLuint and loadBMP is expecting a reference to a GLUint.

try:

if (!LoadBMP("Data/Textures/niobraracross.BMP", &bmptextures[0]))

or just

if (!LoadBMP("Data/Textures/niobraracross.BMP", bmptextures))



Share this post


Link to post
Share on other sites
I changed the bmp loading code to:


bool LoadBMP(LPTSTR szFileName, GLuint &texid) // Creates Texture From A Bitmap File
{
HBITMAP hBMP; // Handle Of The Bitmap
BITMAP BMP; // Bitmap Structure

glGenTextures(1, &texid); // Create The Texture
hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL), szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );

if (!hBMP) // Does The Bitmap Exist?
return FALSE; // If Not Return False

GetObject(hBMP, sizeof(BMP), &BMP); // Get The Object
// hBMP: Handle To Graphics Object
// sizeof(BMP): Size Of Buffer For Object Information
// &BMP: Buffer For Object Information

glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // Pixel Storage Mode (Word Alignment / 4 Bytes)

// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, texid); // Bind To The Texture ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Linear Min Filter
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Linear Mag Filter
glTexImage2D(GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);

DeleteObject(hBMP); // Delete The Object

return TRUE; // Loading Was Successful
}



It still doesn't work. This is more nehe stuff.

Share this post


Link to post
Share on other sites
Define "failed". Polygon isn't drawn? Polygon is drawn but not textured? Polygon is drawn but with wrong texture? Polygon is drawn but with corrupted texture?

Some issues that might be causing this problem: Do you have texturing enabled? Do you have a valid OpenGL context at the point where you create the texture? Is your texture Power-Of-Two sized?

Oh, and AP was wrong about the references thing. You don't need to take the address of the variable when using references, only when using pointers (and you should prefer to use references where possible).

Enigma

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

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

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!