Textur per Hand in OpenGL erstellen?
-
ich habe Folgendes Array
unsigned char ImageData[16*16] = { 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0; }
nun möchte ich aus diesem Array einen Textur erstellen:
glTexImage2D(GL_TEXTURE_2D, 0, 1 , 16, 16,0, GL_RGBA, GL_UNSIGNED_BYTE, ImageData);
Dieses Funktion schlägt jedoch Fehl - aus den Beispielen, die ich gefunden habe kann ich mir auch nichts zusammenreimen
hat jemand Coder bereit oder weiß vielleicht wies geht?
[edit="rapso]codetags[/edit]
-
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,256,256,0, GL_RGBA, GL_UNSIGNED_BYTE,m_Tex);
so schaut's bei mir aus.
btw. dein source schaut leicht komisch aus, 256 werte mit 16werten initialisiert ...zwei dinge die vielleicht ein grund sein könnten.
1. oGL hat ne minimalgröße für texturen, ich bin mir jetzt nicht sicher ob das 16*16 oder 32*32 war, aber könnte ein grund sein.
2. ein immer mal gemachter fehler ist es irgendwo im konstruktor zu versuchen texturen zu initialisieren, wobei oGL an einer anderen stelle im source noch nicht initialisiert wurde.
ansonsten versuch folgendes vorher:
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); GLenum glenum=glGetError(); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glenum=glGetError(); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glenum=glGetError(); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glenum=glGetError(); glPixelStorei(GL_UNPACK_ALIGNMENT,4); glenum=glGetError(); glPixelStorei(GL_UNPACK_ROW_LENGTH,0); glenum=glGetError(); glPixelStorei(GL_UNPACK_SKIP_ROWS,0); glenum=glGetError(); glPixelStorei(GL_UNPACK_SKIP_PIXELS,0); glenum=glGetError();
vielleicht hilft es.
rapso->greets();
-
rgba 16*16 -> 16*16*4
-
durito schrieb:
rgba 16*16 -> 16*16*4
16*16 != 16
-
rapso schrieb:
durito schrieb:
rgba 16*16 -> 16*16*4
16*16 != 16
sag ich ja nicht.
Fuer ein 16*16-rgba-Bild brauchts 16*16*4 Bytes -> Array muss soviele Werte haben fuer diese Angaben von glTexImage2D.
-
durito schrieb:
rapso schrieb:
durito schrieb:
rgba 16*16 -> 16*16*4
16*16 != 16
sag ich ja nicht.
Fuer ein 16*16-rgba-Bild brauchts 16*16*4 Bytes -> Array muss soviele Werte haben fuer diese Angaben von glTexImage2D.dachte es wäre in bezug auf mein kommentar oben
ich hab unsigned int gelesen *G*
*kopfkratz*
rapso->greets();
-
mir ist es gesetern im bett eingefallen - für ein Farbwert reicht ein unsigned char nicht aus - mmmh???? - wie beschreibt man gleich nochmal Farben - ah ja mit dem RGB Model - da wahren doch drei Zahlen die von 0 bis 255 gehn - wie groß ist der wertebereich von unsigned char? ah!!! es muss ein Array mit drei Dimensionen sein
[breite][hoehe][farbtiefe]mmmh - manchmal steht man echt auf der Leitung
-
Ne, Du gibst bei glTexImage RGBA an -> Rot, Grün, Blau, Alpha. Jede dieser Farben geht von 0 bis 255 -> 4* unsigned char
unsigned char ImageData[16*16*4] //16*16 image //irgendwelche Werte in Array abfüllen ... glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA , 16, 16,0, GL_RGBA, GL_UNSIGNED_BYTE, ImageData);
-
habs schon richtige verstanden - keine Angst
mein Torus funzt jetzt mit farbigen Texturen
siehe: Textur per Hand in OpenGL erstellen? die 2te