Warum BMP nur in bestimmter Auflösung?



  • Hy,

    Ich möchte ein Bild auf einen Würfel setzen.
    Das funktioniert mit dem NeHe Beispiel auch wunderbar, aber nur mit dem NeHe Bild.
    Wenn ich jetzt mein Bild anzeigen lassen möchte sehe ich nur meinen Weißen Würfel.

    Jetzt meine Frage: Warum? Und wo kann ich das ändern?
    Die Funktion holt sich doch Automatisch die Bildgröße (TextureImage[0]->sizeX, TextureImage[0]->sizeY).

    Mein Code:

    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 LoadGLTextures()								// 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("TEST2.BMP"))
    	{
    		Status=TRUE;							// Set The Status To TRUE
    		glGenTextures(1, &texture[0]);					// Create The Texture
    
    		// Typical Texture Generation Using Data From The Bitmap
    		glBindTexture(GL_TEXTURE_2D, texture[0]);
    		// Generate The Texture
    		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);	// Linear Filtering
    		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	// Linear Filtering
    	}
    	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
    }
    

    Danke

    RS


  • Mod

    versuch mal

    glGetError()..

    oder so in der art, damit kannst du gut debuggen weshalb etwas nicht klappt.. könnte aber auch an deinem bild liegen...

    rapso->greets();



  • Ich bin den Code schon schritt für schritt durch gegangen.
    Er kann das Bild laden, aber wohl nicht darstellen.
    Wenn ich ein Bild in Paint erstelle das die gleiche Größe des NeHe Bildes hatt dann kann er dies auch anzeigen.
    Ich möchte aber nicht an die Größe gebunden sein.
    Fehler bekomme ich keine.

    MFG

    RS



  • Die Texturgrösse muss ein vielfaches von 2 sein.
    Beispiel: 64 x 64, 128 x 256 usw
    Das ist wohl eine Notwendigkeit für die Textur-Algorithmen.
    Sogar alte DOS-Spiele wie Duke3D etc benutzen Texturen in solchem Format. Daher nehme ich mal an, das es keine OpenGL-Eigenheit ist, sondern ein generelles "Muss" bei Texturen.



  • Das wusste ich leider nicht.
    Vielen Danke es Funktioniert.


  • Mod

    btw: bei neuen grakas ist diese limitierung nicht mehr ganz so vorhanden, aber ich bin mir nicht sicher ob man da in oGL nicht eine extension oder sowat nutzen muss um das zu aktivieren (natürlich nur auf entsprechenden grakas)

    (die auflösung ist wegen dem masking und dem multiplizieren um texturcoordinaten auszurechnen so limitiert :D)

    rapso->greets();


Anmelden zum Antworten