OpenGL Textur erstellen
-
ich habe versucht eine eigene Textur zu erstellen, bin aber gescheitert. habs wie folgt probiert:
static void textur_erstellen(void) { int i, j, c; int height = 64, width = 64; GLubyte texture1[height][width]; bool black = 0; for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { if (black) texture1[i][j] = 0; else texture1[i][j] = 1; black =! black; } } glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_2D, texture[0]); //glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture1); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}was habe ich falsch gemacht ?
-
genau kann ichdir das nicht sagen, weil ich selbs erst am OpenGL lernen, aber ich würde dir raten nimm die ein gutes beispiel zu hilfe. Die besten, die ich bisher gefunden habe waren die von GLFW, aber du kannst natürlich auch andere nehmen, wenn du nicht vor hast mit GLFW zu arbeiten.
-
hab mir schon beispiele angeguckt und mit deren hilfe meinen eigenen code geschrieben.
in dem einen beispiel wurde ne eigene textur wie folgt erstellt:
for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; }muss ich das Textur-Array unbedingt als 3D-Array anlegen oder geht es auch so wie in meinem Code als 2D-Array ?
-
Hans0001 schrieb:
muss ich das Textur-Array unbedingt als 3D-Array anlegen oder geht es auch so wie in meinem Code als 2D-Array ?
Das hängt von dem Parameter ab, den du bei glTexImage2D als Format übergibst (du gibst RGBA an).
Wie du hier nachlesen kannst, bedeutet RGBA, dass du am besten ein eindimensionales Array mit Viererpäckchen der Farbwerte übergibst.
Also zum Beispiel:
Array aus z.B. Bytes { Farbe1_r Farbe1_g Farbe1_b [u]Farbe1_a[/u] Farbe2_r Farbe2_g Farbe2_b [u]Farbe2_a[/u] Farbe3_r Farbe3_g Farbe3_b Farbe3_a etc }Den Datentyp deines Arrays kannst du mit dem Parameter type angeben. Möglichte Optionen sind:
GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP,
GL_UNSIGNED_SHORT, GL_SHORT,
GL_UNSIGNED_INT, GL_INT, und GL_FLOAT.
-
danke für deine hilfe. das programm lässt sich jetzt kompilieren, aber die textur wird immer noch nicht angezeigt. wenn ich GL_TEXTURE_2D enable, kommt nur ein schwarzes Fenster.
-
vielleicht ist der context zu der zeit noch nicht erstellt oder nicht gesetzt?
-
Texturkoordinaten richtig gesetzt?
-
habs hingekriegt, es lag daran, dass ich für die farben nicht 0 und 255 sondern 0 und 1 festgelegt hab.