Falsche Darstellung der Textur in OpenGL



  • Guten Morgen,

    ich habe eine Textur mit einem Bitmap versehen. Unter folgendem Link ist diese zu sehen: http://it-ru.de/forum/download.php?id=5149

    Nun mein Prob: auf der rechten Seite ist das Orginal, so wie ich das Bild erstellt habe. Auf der linken Seite ist die Textur. Leider stellt mir OpenGL dieses aber irgendwie anders dar. Schaut euch das Bild mal bei einer Vergrößerung von 800 an.

    Weiss jemand, was ich falsch gemacht habe? Zur Not kann ich auch noch mal den Code zum Einlesen der Textur posten.



  • Setz die Textur-Filter mal auf GL_LINEAR



  • Die habe ich schon auf linear gesetzt. Hier mal der Code:

    void __fastcall TForm1::OpenGL1GLInit(TObject *Sender)
    {
    ...
    //Transparenz
    glEnable (   GL_BLEND        );
    glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
    LoadTexture ("c:\\eins.bmp", (GLuint*)&Button);
    ...
    }
    
    BOOL TForm1::LoadTexture (AnsiString Filename, GLuint *pTexName)
    {
            HBITMAP hBmp = (HBITMAP) ::LoadImage
            (
                    NULL,
                    (LPCTSTR) Filename.c_str(),
                    IMAGE_BITMAP,
                    0, 0,
                    LR_LOADFROMFILE | LR_CREATEDIBSECTION );
    
            if (hBmp == NULL ) return FALSE;
    
            BITMAP BM;
            ::GetObject (hBmp, sizeof (BM), &BM);
            if(BM.bmBitsPixel != 24)
                    return FALSE;
    
            if(!*pTexName)
                    glGenTextures (1, pTexName);
            else
                    return FALSE;
    
            glBindTexture(GL_TEXTURE_2D, *pTexName);
            glPixelStorei(GL_UNPACK_ALIGNMENT,4);
            glPixelStorei (GL_UNPACK_ROW_LENGTH, 0 );
            glPixelStorei (GL_UNPACK_SKIP_ROWS, 0 );
            glPixelStorei (GL_UNPACK_SKIP_PIXELS, 0 );
            glTexParameteri (GL_TEXTURE_2D,
                    GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri (GL_TEXTURE_2D,
                    GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glTexParameteri ( GL_TEXTURE_2D,
                    GL_TEXTURE_WRAP_S, GL_REPEAT);
            glTexParameteri ( GL_TEXTURE_2D,
                    GL_TEXTURE_WRAP_T, GL_REPEAT );
            glTexEnvf ( GL_TEXTURE_ENV,
                    GL_TEXTURE_ENV_MODE, GL_REPLACE );
    
            gluBuild2DMipmaps(
                    GL_TEXTURE_2D,
                    3,
                    BM.bmWidth, BM.bmHeight,
                    GL_BGR_EXT,
                    GL_UNSIGNED_BYTE,
                    BM.bmBits);
    
            glBindTexture(GL_TEXTURE_2D, 0);
            return TRUE;
    }
    


  • Bei glTexEnvf ist glaube ich was falsch.
    Sicher das es da die Funktion GL_REPLACE gibt ? Ich finde nur die drei: GL_MODULATE, GL_DECAL, GL_BLEND


Anmelden zum Antworten