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.


  • Mod

    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.


Anmelden zum Antworten