Ich verstehe nicht, warum es nicht reicht, wenn man die Normale des Vertex udn die NormalMap bzw. BumpMap (nicht die total bunte) hat.
Ich hatte gedacht, dass die Normalen aus der BumpMap einfach irgendwie mit der Vertex Normale und der NormalMatrix (ModelviewMatrix - Position) verrechnet wird.
"irgendwie mit der Normale verrechnet" ist ja auch das was passiert
Das was du da allerdings als "Normalmatrix" bezeichnest geht mir nicht ganz auf.
Die Vektoren in der Bumpmap kannst du dir vorstellen wie ein Fläche von der lauter Pfeile weggehen.. jetzt legst du diese Fläche auf dein Model, folglich krümmst und zerrst du die Fläche je nach Texturkoordinaten, damit du damit dein Model austapezieren kannst -> die Vektoren werden umgerechnet je nach dem wie man sie drauflegt. Den Raum in dem sie vorher lagen nennt man Tangentspace - und der ist dann eben wie die Texturkoordinaten pro Vertex anders angegeben. Der Tangentspace wird aufgemacht durch Normale und Tangente; die Binormale als dritte Achse wird normal im Vertexshader berechnet, man kann sie aber auch vorberechnen (es ist aber klüger sie jedes mal neu zu berechnen, da man sodurch das Vertexformat kleiner halten kann).
Das jetzt weiter auszubreiten spar ich mir jetzt, da gibts genug im Internet was das fehlerfreier erklären kann als ich; außerdem hab ich auch nicht genau parat wie man den Tangentspace nochmal aufmacht. Sich das vorzustellen was man jetzt rechnen muss ist nicht umbedingt so einfach je nach Mathematikkenntnissen... such einfach mal nach Bumpmap Erklärungen oder direkt nach Tangentspace; da findet man nen Haufen dazu.
Wenn man die Tangenten im Vertex speichern muss, muss man ja auch die Texture Koordinaten, Farbe und die Normale über die Vertex-Attributen selbst angeben. glNormalPointer würde dann nichts mehr nutzen, stimmt's?!
Ähm also mit OpenGL spezifischen Sachen kenne ich mich jetzt nicht aus, aber das Texturkoordinaten, Normale, eventuell Farbe und eben auch Tangente pro Vertex gespeichert sind sollte wohl nix neues sein?