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]


  • Mod

    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


  • Mod

    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.


  • Mod

    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


Anmelden zum Antworten