Software Texture-Mapping



  • Hallo,

    Ich habe einen Java-Software-Renderer und möchte diesen nun um Texture-Mapping erweitern. Ich bekomme für jeden Vertex eine u und eine v-Koordinate in einer Textur (die wird pro Surface gespeichert, unser Aufbau hier: Mesh besteht aus vielen Surfaces -> bestehen aus Dreiecken -> bestehen aus 3 Vertices) aus der Content-Pipeline als Input.

    Weiß jemand wo ich nun Informationen zum Thema TextureMapping herbekommen kann? Macht man das heutzutage im Rahmen eines Pixel-Shaders? Dort bekomme ich derzeit jedenfalls die Farbe für ein Pixel her (derzeit wird die Farbe der Vertices interpoliert und mit der Beleuchtung im Vertex-Shader (bzw. bei Phong im Pixel-Shader) multipliziert).

    Welche Arten von Texture Filtering sind aktuell? Welche sind erstmal einfach zu erstellen? Bücher? Literatur? Tutorials?

    Wenn ich etwas grundsätzlich falsch verstanden habe wäre das natürlich auch gut zu wissen 🤡

    Texturen liegen als BufferedImage in Java vor 🙂

    MfG SideWinder


  • Mod

    u und v kannst du genau wie die farbe interpolieren, kannst es also generisch fuer alle vertex daten implementieren.

    ansonsten googlen: http://www.google.de/search?q=perspective+correct+texture+mapping

    und du bekommst:
    http://chrishecker.com/Miscellaneous_Technical_Articles
    http://www.lysator.liu.se/~mikaelk/doc/perspectivetexture/
    etc.

    aktuell sind
    -point/nearest filtering
    -bilinear
    -trilinear (wenn du mipmapping hast)
    -anisotropic



  • Macht man das heutzutage im Rahmen eines Pixel-Shaders?

    Jupp. Der Pixel-Shader bekommt die Textur-Koordinaten als Input gefüttert, und darf damit machen was er mag.
    Üblicherweise verwendet er die Textur-Koordinaten dann um einen Texel aus der Textur auszulesen. Er kann die Textur-Koordinaten davor aber noch beliebig modifizieren. Oder überhaupt für ganz was andered verwenden. Oder vielleicht die Texel die er aus einer Textur liest als Koordinaten für einen anderen Texture-Lookup verwenden - was auch immer.

    Dabei werden sog. "Sampler" verwendet, die man im Shader-Code definiert, und im Programm dann vor dem DrawPrimitives() Aufruf mit einer Textur verknüpft.
    Der Filter-Mode und Clamping-Mode werden ebenfalls auf dem "Sampler" eingestellt.

    Guck dir einfach ein paar Beispiel-Shader an, ist nicht schwer das Grundprinzip zu verstehen 🙂


Anmelden zum Antworten