Warum werden Texturkoordinaten in den World Space transformiert
-
Hallo,
ich habe gerade mal ein simples Vertex und Fragment Programm geschrieben, das ein 3D-Model + Textur auf dem Bildschirm darstellt. Das Vertex Program wendet dabei die Transformationen auf den Positionsvektor und die Texturkoordinate an, das Fragment Program macht den Textur-Lookup.
Jetzt habe ich festgestellt, dass das Model richtig texturiert wird, wenn auf die Position die worldViewProj-Transformation anwendet wird (logisch) und auf die Texturkoordinate die world-Transformation. Letzteres verstehe ich nicht so ganz, warum wird auf die Texturkoordinate eine andere Transformation angewendet? Schließlich befinden sich ja sowohl Vertices als auch Texturkoordinaten beim Erstellen des Models im selben Koordinatensystem (Object space?). Wenn ich mir vorstelle die Vertices in ein KS zu transformieren und die Texturkoordinaten in ein anderes und dann die Textur auf das Model zu pappen sollte da ein totales Chaos bei rauskommen (tatsächlich passiert das aber wenn man beide in den Clip Space transformiert). Warum ist das so?
-
Man transformiert gewöhnlicherweise die texcoords überhaupt nicht. Und die Vertexpositionen und texcoords befinden sich auch nicht im selben Koordinatensystem. Die Vertexpositionen sind überlichweise im Object Space angegeben und die texcoords im Texture Space.
-
this->that schrieb:
Man transformiert gewöhnlicherweise die texcoords überhaupt nicht. Und die Vertexpositionen und texcoords befinden sich auch nicht im selben Koordinatensystem. Die Vertexpositionen sind überlichweise im Object Space angegeben und die texcoords im Texture Space.
Gut zu wissen, ich hatte mich schon gewundert. Naja das Model war nicht texturiert weil im Vertex-Shader keine Operation auf den TexCoords erfolgte und sie deshalb nicht an den Pixel-Shader weitergegeben wurden (??). die world-Matrix war hier zufällig die Einheitsmatrix deshalb hat die Trafo hingehaun
Jetzt habe ich noch eine generelle Frage zu Shadern: Kann man Semantics im Pixel-Shader nur abfragen, wenn sie im Vertex-Shader ausgegeben wurden oder werden die unbenutzten Semantics implizit an den Pixel-Shader weitergereicht? Weil dann müssten die Parameter des Pixel-Shaders ja immer eine Teilmenge der (Ausgangs-)Parameter des Vertex-Shaders sein...