2017-05-18 4 views
0

Ich habe eine einfache OpenGL-Anwendung erstellt. Beim Zoomen in ein strukturiertes Quad wird die Textur verpixelt statt verschwommen. Ich vermute, das liegt an fehlenden Mipmaps?Textur pixelig anstatt verschwommen

Ich eröffne mein Textur wie folgt aus:

glGenTextures(1, &mTexture); 
    glBindTexture(GL_TEXTURE_2D, mTexture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

Und ich es von einem PBO aktualisieren wie folgt aus:

glBindTexture(GL_TEXTURE_2D, mTexture); 
    glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, mPboIds[mPboIndex]); 

    glTexSubImage2D(
    GL_TEXTURE_2D, 
    0, 0, 0, 
    frame->GetWidth(), 
    frame->GetHeight(), 
    GL_RGB, 
    GL_UNSIGNED_BYTE, 
    0); 

Ich dachte, dass GL_TEXTURE_MAG_FILTER und GL_TEXTURE_MIN_FILTER würde OpenGL sagen die Mipmaps zu erzeugen. Ist das nicht der Fall? Wie kann ich die Mipmap-Generierung für meine Textur aktivieren?

Antwort

1

Der Vergrößerungsfilter verwendet wird, wenn Sie den Zoom auf eine Textur erhöhen, und zwei Werte haben kann:

  • GL_NEAREST - Liefert den Wert des Textur Element, das (in Manhattan entfernt) am nächsten ist, um die angegebene Texturkoordinaten.

  • GL_LINEAR - Gibt den gewichteten Durchschnitt der Texturelemente zurück, die den angegebenen Texturkoordinaten am nächsten sind. Diese können Elemente enthalten, die von anderen Teilen einer Textur umschlossen oder wiederholt wurden, abhängig von den Werten von GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T und von der genauen Zuordnung.

In Ihrem Fall verwenden Sie den falschen Vergrößerungsfilter. Es muss GL_LINEAR sein, um den pixelierten Effekt zu minimieren.

MipMaps, auf der anderen Seite wird verwendet, wenn Sie den Zoom verkleinern möchten und einen reibungslosen Übergang erhalten möchten, wenn die Textur zu weit vom Betrachter entfernt wird. Weitere Informationen zu MipMaps finden Sie unter glTexParameter Handbuchseiten, im Abschnitt GL_TEXTURE_MIN_FILTER und in der Manualpage glGenerateMipmap.