C/OpenGL : geladenes Bild erscheint nur blau.
-
Hallo Leute,
ich versuche gerade ein OpenGL ein (16x16px) TGA Bild mit Transparenzkanal zu rendern, es erscheint aber nur blau.
Es ist ein TGA Bild mit Transparenz.so bin ich vorgegangen:
GLuint textureIds[3]; glGenTextures(SPRITE_MAX,textureIds); glBindTexture(GL_TEXTURE_2D,crossSprite[i].textureId); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,16,16,0,GL_LUMINANCE,GL_UNSIGNED_BYTE,crossSprite[i].img.GetData()); ... // zeichnen double fov = 0.01*eye.GetFov(); glBindTexture(GL_TEXTURE_2D,crossSprite[colourId].textureId); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(pos.x[0]+0.5,pos.x[1]-fov,pos.x[1]+fov); glTexCoord2f(1.0f, 0.0f); glVertex3f(pos.x[0]+0.5,pos.x[1]+fov,pos.x[1]+fov); glTexCoord2f(1.0f, 1.0f); glVertex3f(pos.x[0]+0.5,pos.x[1]+fov,pos.x[1]-fov); glTexCoord2f(0.0f, 1.0f); glVertex3f(pos.x[0]+0.5,pos.x[1]-fov,pos.x[1]-fov); glEnd();
Die Position und die Größe ist einwandfrei. Was mache ich falsch und warum ist das Bild durchgehend blau, egal welches ich nehme?
-
Was ist denn crossSprite[index].textureId?
glBindTexture erwartet natürlich das handel des von glGenTextures erzeugten Objekts.Und bist du sicher, dass du GL_LUMINANCE verwenden willst?
-
inter2k3 schrieb:
Was ist denn crossSprite[index].textureId?
glBindTexture erwartet natürlich das handel des von glGenTextures erzeugten Objekts.Ich erzeuge die ids etwas früher und verteile sie zu den richtigen sprites. Das handle wird dabei richtig gesetzt.
Muss ich vielleicht irgendwie die Farbe ausschalten?
-
inter2k3 schrieb:
Was ist denn crossSprite[index].textureId?Und bist du sicher, dass du GL_LUMINANCE verwenden willst?
Ich möchte ein Kreuz an eine gewisse position zeichnen. Das Kreuz habe ich in der Bilddatei gemalt inkl alpha kanal.
Warum könnte GL_LUMINANCE deiner Meinung nach falsch sein?
-
Ich weiss ja nicht wie du die Bilddaten gespeichert hast.
Ich vermute, dass du für jeden Kanal (R,G,B und auch alpha) einzelne Werte aus dem TGA gelesen und gespeichert hast, und dann wäre die Angabe von GL_LUMINANCE eben nicht richtig.Hast du vlt. glEnable(GL_TEXTURE_2D) vergessen?
-
inter2k3 schrieb:
Ich weiss ja nicht wie du die Bilddaten gespeichert hast.
Ich vermute, dass du für jeden Kanal (R,G,B und auch alpha) einzelne Werte aus dem TGA gelesen und gespeichert hast, und dann wäre die Angabe von GL_LUMINANCE eben nicht richtig.Hast du vlt. glEnable(GL_TEXTURE_2D) vergessen?
Danke für deine Geduld
glEnable(GL_TEXTURE_2D) klappt nicht.
Ich habe die Daten in Paint.NET als 32 Bit TGA unkomprimiert gespeichert.
Welche Einstellung wäre deiner Meinung nach richtig?
Danke
-
anfaenger01 schrieb:
Danke für deine Geduld
glEnable(GL_TEXTURE_2D) klappt nicht.
Was meinst du mit klappt nicht - das musst du ohnehin im code stehen haben.
anfaenger01 schrieb:
Ich habe die Daten in Paint.NET als 32 Bit TGA unkomprimiert gespeichert.
Welche Einstellung wäre deiner Meinung nach richtig?
DankeWie gesagt weiss ich ja nicht, wie dein TGA-Loader die Daten einliest und wie du sie speicherst, aber ich würde aus dem Bauch herraus einfach mal GL_RGBA oder GL_BGRA tippen.
Nachtrag: Was is vergessen hab zu erwähnen - du solltest noch einen minification- und einen magnificatoin-Filter mit für die Textur setzen:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
inter2k3 schrieb:
Was meinst du mit klappt nicht - das musst du ohnehin im code stehen haben.
Dieser State wurde schon vorher gesetzt. Wenn ich ihn kurz vor dem GL_QUADS state einfüge ändert es nichts am Zustand.
anfaenger01 schrieb:
Wie gesagt weiss ich ja nicht, wie dein TGA-Loader die Daten einliest und wie du sie speicherst, aber ich würde aus dem Bauch herraus einfach mal GL_RGBA oder GL_BGRA tippen.
Im bestehenden Code werden die Texturen fast genau so geladen wie ich es jetzt versuche. Ich vermute es liegt nicht am image loader oder Anordnung.
anfaenger01 schrieb:
Nachtrag: Was is vergessen hab zu erwähnen - du solltest noch einen minification- und einen magnificatoin-Filter mit für die Textur setzen:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Brachte auch keinen Effekt.
Es sieht so aus: http://img705.imageshack.us/img705/2148/opengltga.jpg
Ich habe versucht glColor4f(0.0,0.0,0.0,1.0);
Dann wird das Kästchen schwarz
-
Jetzt habe ich einen anderen Aufruf gefunden der funktioniert, allerdings ohne Alpha Kanal
glTexImage2D(GL_TEXTURE_2D,0,3,16,16,0,GL_RGB,GL_UNSIGNED_BYTE,crossSprite[i].img.GetData());
Wenn ich es nun in RGBA ändere dann gibt es Grafikfehler.
-
Woher genau kommt der Inhalt von crossSprite[i].img.GetData()!? Als internalFormat würd ich immer ein exaktes Format angeben, in dem Fall wär das GL_RGBA8 oder GL_BGRA8...
-
dot schrieb:
Als internalFormat würd ich immer ein exaktes Format angeben, in dem Fall wär das GL_RGBA8 oder GL_BGRA8...
Also:
glTexImage2D(GL_TEXTURE_2D,0,3,16,16,0,GL_RGBA8,GL_UNSIGNED_BYTE,crossSprite[i].img.GetData());
Funktioniert auch nicht
dot schrieb:
Woher genau kommt der Inhalt von crossSprite[i].img.GetData()!?
Das ist eine wxWidgets Funktion:
http://docs.wxwidgets.org/trunk/classwx_image.html#5cac38e8fd2536852406d9c8daa55023und der Datensatz:
static const unsigned char spriteredcross[] = { 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x08, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xFF, 0xFF, 0x86, 0x00, 0x00, 0x00, 0x00 };
-
anfaenger01 schrieb:
dot schrieb:
Als internalFormat würd ich immer ein exaktes Format angeben, in dem Fall wär das GL_RGBA8 oder GL_BGRA8...
Also:
glTexImage2D(GL_TEXTURE_2D,0,3,16,16,0,GL_RGBA8,GL_UNSIGNED_BYTE,crossSprite[i].img.GetData());
Funktioniert auch nicht
internalFormat ist der dritte Parameter und nicht der siebente
Also:glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,16,16,0,GL_RGBA,GL_UNSIGNED_BYTE,crossSprite[i].img.GetData());
Wenn ich mir deine Daten so anschau zähl ich (25 - 1) * 10 - 2 = 238 Bytes. Das ist kein Vielfaches von 4, was mich zu dem Schluss führt dass die Daten in diesem Array da keinen Akphakanal enthalten. Irgendwas is da aber sowieso komisch, wie kann das Bild 16x16 Pixel groß sein wenn es nur 238 Bytes hat!?
-
dot schrieb:
internalFormat ist der dritte Parameter und nicht der siebente
Wärst du so freundlich zu sagen wie die Zeile lauten muss? Ich verstehe gerade den Unterschied zwischen internalFormat und format nicht?
dot schrieb:
Wenn ich mir deine Daten so anschau zähl ich (25 - 1) * 10 - 2 = 238 Bytes. Das ist kein Vielfaches von 4, was mich zu dem Schluss führt dass die Daten in diesem Array da keinen Akphakanal enthalten. Irgendwas is da aber sowieso komisch, wie kann das Bild 16x16 Pixel groß sein wenn es nur 238 Bytes hat!?
Ups, ist wahrscheinlich komprimiert gewesen:
static const unsigned char spriteredcross[] = { 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
anfaenger01 schrieb:
dot schrieb:
internalFormat ist der dritte Parameter und nicht der siebente
Wärst du so freundlich zu sagen wie die Zeile lauten muss? Ich verstehe gerade den Unterschied zwischen internalFormat und format nicht?
hab ich doch oben eh hingeschrieben^^
internalFormat ist das Format in dem die Textur auf der Grafikkarte abgelegt werden soll. Das andere format ist das Format in dem die Daten die du an glTexImage2D() übergibst vorliegen.
anfaenger01 schrieb:
Ups, ist wahrscheinlich komprimiert gewesen:
Jetzt zähl ich 1042 Byte, sollten aber 1024 sein, kanns sein dass da noch irgendwelche Headerdaten mit drin sind (der TGA Header wär nämlich genau 18 Byte groß)!?
-
dot schrieb:
Jetzt zähl ich 1042 Byte, sollten aber 1024 sein, kanns sein dass da noch irgendwelche Headerdaten mit drin sind!?
Gehören Header Daten nicht rein?
-
anfaenger01 schrieb:
dot schrieb:
Jetzt zähl ich 1042 Byte, sollten aber 1024 sein, kanns sein dass da noch irgendwelche Headerdaten mit drin sind!?
Gehören Header Daten nicht rein?
Um, nein, was sollte die Funktion denn damit anfangen!?
-
dot schrieb:
Um, nein, was sollte die Funktion denn damit anfangen!?
Wundert mich weil man an einer anderen stelle dieselbe Funktion verwendet und es einwandfrei funktioniert.
Die Zeilen sehen so aus:
glBindTexture (GL_TEXTURE_2D, tm->textures[index++]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D (GL_TEXTURE_2D,0,GL_RGB,size,size,0,GL_LUMINANCE, GL_UNSIGNED_BYTE,tmp);
-
Muss mich korrigieren. Die wxWidgets funktion gibt ja alles unkomprimiert und ohne header aus. Wenn ich die von dir genannte Zeile verwende wird das nichts
Ich bekomme Renderfehler.
-
Ok, vielleicht braucht dein wxWidgets Image Ding da die Headerdaten, das kann ich dir nicht sagen. glTexImage2D() jedenfalls fangt damit nix an, das will einfach nur ein rohes Array aus Farbwerten.
Warum hast du jetzt wieder die alte Zeile mit GL_LUMINANCE, ich dachte es wurde schon gesagt dass das Blödsinn ist!? Was ist tmp!?
EDIT: Zeig mal bitte ein Bild wie diese "Renderfehler aussehen"...
-
Ich denke dass ich (meinen) Fehler gefunden habe. wxWidgets gibt RGBRGBRGB zurück. Da fehlt der Alpha Kanal.