OpenGL: Texture-Filtering einstellen



  • Hi!
    Habe mich gestern mit den Filteringverfahren für Texturen beschäftigt. Jetzt ist die Frage, wie ich diese in OpenGL überhaupt umsetzen kann.

    Welche Parameter braucht glTexParameter(MIN und MAG) für
    - Point Sampling (Für MIPMaps und Nicht-MIPMaps - falls für MIPMaps überhaupt möglich)
    - Bi-Lineares Filtering (Für MIPMaps und Nicht-MIPMaps)
    - Tri-Lineares Filtering
    - An-Isotropisches Filtering (Für MIPMaps und Nicht-MIPMaps)

    mfg olli



  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc03_9upe.asp
    Google ist auch dein Freund.

    [edit]
    GL_EXT_texture_filter_anisotropic
    Könnte interessant sein
    [/edit]



  • Ja, jetzt wird es mir auch klar...

    Also bitte bestätigen, oder korrigieren:
    - GL_NEAREST = Point Sampling
    - GL_LINEAR = Bi-Lineares Filtering

    GL_NEAREST_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR und GL_LINEAR_MIPMAP_LINEAR wie darf man diese Verfahren verstehen?

    00000000
    00000000
    00000000
    00000000
    00000000
    00000000
    00000000
    00000000
    --------
    1111
    1111
    1111
    1111
    ----
    22
    22
    --
    3
    

    Stellen wir uns vor das wäre die MIPMap mit den einzelnen Maps, und er ist gerade bei einem Pixel der MAP 0 und 1 einbeziehen muss.

    GL_NEAREST_MIPMAP_NEAREST heißt dann, dass er Point Sampling auf Map 0 und 1 anwendet und dann nochmal Point Sampling für den Übergang der beiden gefilterten Maps.

    GL_LINEAR_MIPMAP_NEAREST heißt, dass er bi-lineares Filtering auf Map 0 und 1 anwendet und dann nochmal Point Sampling für den Übergang der beiden gefilterten Maps.

    GL_NEAREST_MIPMAP_LINEAR heißt, das er Point Sampling auf Map 0 und 1 anwendet und dann bi-lineares Filtering für den Übergang der beiden gefilterten Maps verwendet.

    GL_LINEAR_MIPMAP_LINEAR heißt, er wendet bi-lineares Filtering auf Map 0 und 1 an und benutzt bi-lineares Filtering für den Übergang der gefilterten Maps.

    Der Minifikante Filter wird nur benutzt, wenn die Textur verkleinert werden muss. Der Magnifikante Filter wird nur benutzt, wenn die Textur vergrößert werden muss.

    Ist das so korrekt, wie ich es beschrieben habe?

    Wie stellt man an-isotropisches Filtering ein?

    mfg olli

    Edit: OK, die an-istropische Filtering-Extension schaue ich mir mal an.



  • Vertex schrieb:

    Ja, jetzt wird es mir auch klar...

    Also bitte bestätigen, oder korrigieren:
    - GL_NEAREST = Point Sampling
    - GL_LINEAR = Bi-Lineares Filtering

    Ja

    Vertex schrieb:

    GL_NEAREST_MIPMAP_NEAREST heißt dann, dass er Point Sampling auf Map 0 und 1 anwendet und dann nochmal Point Sampling für den Übergang der beiden gefilterten Maps.

    Nein, er nimmt die passendste MipMap und daraus den passendsten Texel.

    Vertex schrieb:

    GL_LINEAR_MIPMAP_NEAREST heißt, dass er bi-lineares Filtering auf Map 0 und 1 anwendet und dann nochmal Point Sampling für den Übergang der beiden gefilterten Maps.

    Nein, er nimmt die passendste MipMap und interpoliert daraus bilinear den Pixel

    Vertex schrieb:

    GL_NEAREST_MIPMAP_LINEAR heißt, das er Point Sampling auf Map 0 und 1 anwendet und dann bi-lineares Filtering für den Übergang der beiden gefilterten Maps verwendet.

    Nur lineares Filtering (es gibt nur 2 Werte aus denen er interpolieren kann) ansonsten richtig.

    Vertex schrieb:

    GL_LINEAR_MIPMAP_LINEAR heißt, er wendet bi-lineares Filtering auf Map 0 und 1 an und benutzt bi-lineares Filtering für den Übergang der gefilterten Maps.

    Wieder nur lineares Filtering zwischen beiden Maps, ansonsten richtig.

    Vertex schrieb:

    Der Minifikante Filter wird nur benutzt, wenn die Textur verkleinert werden muss. Der Magnifikante Filter wird nur benutzt, wenn die Textur vergrößert werden muss.

    Ja

    Vertex schrieb:

    Wie stellt man an-isotropisches Filtering ein?

    Glfloat largest_supported_anisotropy;
    // Die maximal unterstützte Anisotropie holen
    glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_supported_anisotropy);
    // Und setzen
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, &largest_supported_anisotropy);
    

    Obiger Code ist aus http://www.nps.navy.mil/cs/sullivan/MV4470/resources/filter_anisotropic2.doc
    ausserdem interessant:
    http://www.msi.unilim.fr/~porquet/glexts/GL_EXT_texture_filter_anisotropic.txt.html


Anmelden zum Antworten