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
-
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.
-
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();