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
-
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