Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 4 of 4

Thread: open GL texure load problem

  1. #1

    open GL texure load problem

    how i should load the Data of the bmp
    is the Data of the bmp for texture the Raw Pixel Datas without the Header or with the header?

    glTexImage2D(GL_TEXTURE_2D, 0, 3, 100, 100, 0,
    GL_RGB, GL_UNSIGNED_BYTE,&tmpData);

  2. #2

    Re: open GL texure load problem

    i load the bmp very simple

    Code :
    GLuint TextureArray[1];
    char tmpData[30000];
    typedef struct tagBMPHeader{
    WORD Signature; // 4D42 hex
    DWORD sizeImageData; //
    WORD res1;  //reserverd must be 0
    WORD res2;  // same
    DWORD offsetDATA; // offset of image data;
    DWORD BitmapIfoHeaderSize; //
    DWORD width;
    DWORD height;
    WORD planes;
    WORD depth; // bpb bits per pixel deth 8/16/24/32
    DWORD compression; //(0=none, 1=RLE-8, 2=RLE-4)
    DWORD sizeRawData; //size of image data padding
    DWORD hrBitsPerMeter;
    DWORD vrBitsPerMeter;
    DWORD numColors;
    DWORD numImportantColors;
    }BMPHeader;
     BMPHeader bmfh;

    Code :
    bool loadBMP(char *file) {
    	FILE *filePtr;                  //file stream for reading
    	char *tempData;       //temp storage for image data
    	int numColours;            //total available colours
     
    		  filePtr=fopen(file,"rb");
     
    	//if the file does not exist return in error
    	if(filePtr==NULL) {
    	printf("NOT FOUND");
    	getc(stdin);
       		fclose(filePtr);
    		return false;
    	}
    	char buff[56];
     
       memset(&bmfh,0,sizeof(bmfh));
       fread(&buff,sizeof(bmfh),1,filePtr);
       bmfh.Signature=*(PWORD)(buff);
       bmfh.offsetDATA=*(PDWORD)(buff+0xA);
       bmfh.sizeImageData=*(PDWORD)(buff+0x2);
       bmfh.width=*(PDWORD)(buff+0x12);
       bmfh.height=*(PDWORD)(buff+0x16);
       bmfh.sizeRawData=*(PDWORD)(buff+0x22);
     
       fseek(filePtr,(bmfh.offsetDATA),SEEK_SET);
       fread(&tmpData,bmfh.sizeRawData,1,filePtr);
    	//memcpy(&bData.DATA,(tmpData+bmfh.offsetDATA),(INT) bmfh.sizeRawData),
    	fclose(filePtr);
     
       glGenTextures(1, &TextureArray[1]);					
     
    		glBindTexture(GL_TEXTURE_2D, TextureArray[1]);
    		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);	// Linear Filtering
    		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	// Linear Filtering
     
       glTexImage2D(GL_TEXTURE_2D, 0, 3, 100, 100, 0,
    					GL_RGB, GL_UNSIGNED_BYTE,&tmpData);

    but it does not load the texutre anyway? btw it does not render it on a cube for example?
    Code :
    	glBindTexture(GL_TEXTURE_2D, TextureArray[1]);       // Select our texture
    			glBegin(GL_QUADS);
    		// Front face
    		glTexCoord2f(0.0f, 0.0f); glVertex3f(-10.0f, -10.0f,  10.0f);	// Bottom left of the texture and quad
    		glTexCoord2f(10.0f, 0.0f); glVertex3f( 10.0f, -10.0f,  10.0f);	// Bottom right of the texture and quad
    		glTexCoord2f(10.0f, 10.0f); glVertex3f( 10.0f,  10.0f,  10.0f);	// Top right of the texture and quad
    		glTexCoord2f(0.0f, 10.0f); glVertex3f(-10.0f,  10.0f,  10.0f);	// Top left of the texture and quad
    		// Back face
    		glTexCoord2f(10.0f, 0.0f); glVertex3f(-10.0f, -10.0f, -10.0f);	// Bottom right of the texture and quad
    		glTexCoord2f(10.0f, 10.0f); glVertex3f(-10.0f,  10.0f, -10.0f);	// Top right of the texture and quad
    		glTexCoord2f(0.0f, 10.0f); glVertex3f( 10.0f,  10.0f, -10.0f);	// Top left of the texture and quad
    		glTexCoord2f(0.0f, 0.0f); glVertex3f( 10.0f, -10.0f, -10.0f);	// Bottom left of the texture and quad
    		// Top face
    		glTexCoord2f(0.0f, 10.0f); glVertex3f(-10.0f,  10.0f, -10.0f);	// Top left of the texture and quad
    		glTexCoord2f(0.0f, 0.0f); glVertex3f(-10.0f,  10.0f,  10.0f);	// Bottom left of the texture and quad
    		glTexCoord2f(10.0f, 0.0f); glVertex3f( 10.0f,  10.0f,  10.0f);	// Bottom right of the texture and quad
    		glTexCoord2f(10.0f, 10.0f); glVertex3f( 10.0f,  10.0f, -10.0f);	// Top right of the texture and quad
    		// Bottom face
    		glTexCoord2f(10.0f, 10.0f); glVertex3f(-10.0f, -10.0f, -10.0f);	// Top right of the texture and quad
    		glTexCoord2f(0.0f, 10.0f); glVertex3f( 10.0f, -10.0f, -10.0f);	// Top left of the texture and quad
    		glTexCoord2f(0.0f, 0.0f); glVertex3f( 10.0f, -10.0f,  10.0f);	// Bottom left of the texture and quad
    		glTexCoord2f(10.0f, 0.0f); glVertex3f(-10.0f, -10.0f,  10.0f);	// Bottom right of the texture and quad
    		// Right face
    		glTexCoord2f(10.0f, 0.0f); glVertex3f( 10.0f, -10.0f, -10.0f);	// Bottom right of the texture and quad
    		glTexCoord2f(10.0f, 10.0f); glVertex3f( 10.0f,  10.0f, -10.0f);	// Top right of the texture and quad
    		glTexCoord2f(0.0f, 10.0f); glVertex3f( 10.0f,  10.0f,  10.0f);	// Top left of the texture and quad
    		glTexCoord2f(0.0f, 0.0f); glVertex3f( 10.0f, -10.0f,  10.0f);	// Bottom left of the texture and quad
    		// Left face
    		glTexCoord2f(0.0f, 0.0f); glVertex3f(-10.0f, -10.0f, -10.0f);	// Bottom left of the texture and quad
    		glTexCoord2f(10.0f, 0.0f); glVertex3f(-10.0f, -10.0f,  10.0f);	// Bottom right of the texture and quad
    		glTexCoord2f(10.0f, 10.0f); glVertex3f(-10.0f,  10.0f,  10.0f);	// Top right of the texture and quad
    		glTexCoord2f(0.0f, 10.0f); glVertex3f(-10.0f,  10.0f, -10.0f);	// Top left of the texture and quad
    	glEnd();

  3. #3
    Junior Member Regular Contributor
    Join Date
    Dec 2008
    Location
    USA
    Posts
    134

    Re: open GL texure load problem

    You do not send the header data to OpenGL in glTexImage2D; the essential information is passed as arguments to the function. There is information on exactly what these mean on the man page for the function.

    Another thing: texture coordinates, regardless of the actual size of the image, go from 0 to 1. In your code, they go from 0 to 10. This should repeat the image 10 times across the face, which may or may not be what you want.

    You need to enable texturing (glEnable(GL_TEXTURE_2D)). Not all your code is here, so I can't check to make sure that you did it. Make sure the texture environment is what you think it is.

  4. #4

    Re: open GL texure load problem

    thnx a lot for the information, the problem was the opengl32.dll it did't loaded my textures. after i got new drivers for my graphic card from nvidia it loads the texture now, i also got the new gl3.h file now its fine but i need to renew my code it was all only based on opengl 1.1 so some things changed, like lightning etc..

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •