Normale Zuordnung von GLSL mit LibGDX

8

Ich versuche, normales Mapping mit LibGDX zu implementieren. Also habe ich ein paar positive Ergebnisse bekommen, wenn ich diffuse und spiegelnde Farben im Vertex Shader berechne (zumindest denke ich das).

Vertex-Shader:

%Vor%

Fragment-Shader:

%Vor%

Ergebnis:

Wie Sie sehen können, wird das Ergebnis korrekt gerendert. Spiegelfleck verhält sich wie von vielen Beispielen. Aber ich muss Specular Color im Fragment-Shader implementieren, um ein beeindruckenderes Bild zu erhalten. Also habe ich hier ein Beispiel von gefunden und jetzt versuche ich es zum Laufen zu bringen.

Vertex-Shader:

%Vor%

Fragment-Shader:

%Vor%

Ergebnis:

Spiegelfleck ist falsch. Ich dachte es passiert wegen falscher Matrixberechnung. Wenn es wahr ist, warum funktionieren die ersten paar Shader richtig? Wie bekomme ich model-view matrix, normal matrix und andere in LibGDX?

%Vor%

Also, meine Frage ist was ist falsch in den letzten paar Shadern?

    
Nolesh 23.04.2015, 14:06
quelle

1 Antwort

5

Das Problem war in meinem Modell (Mesh). Nach einiger Zeit des Grabens fand ich heraus, dass mein Mesh nicht tangents und binormals hat. Es ist passiert, weil ich Blender 2.58 verwendet habe, das das Modell nicht in FBX mit Tangentialraum exportieren kann. Glücklicherweise haben sie diesen Fehler in Blender 2.71 und später behoben. Wenn Sie also Ihr Modell exportieren, sollten Sie Tangent Space -Parameter ankreuzen und die Version FBX 7.4 binary wählen. Um sicherzustellen, dass Ihr Mesh Tangenten und Binormals enthält, können Sie fbx-converter Werkzeug, um Ihre fbx -Datei in das g3dj -Format anstatt in den Standard g3db zu konvertieren, indem Sie die folgende Option verwenden:

%Vor%

Öffnen Sie es dann in einem Programm wie Notepad und prüfen Sie, ob die Attribute TANGENT und BINORMAL

enthalten %Vor%

Nur eins verstehe ich nicht, warum funktioniert lamberFactor mit falschem Tangens-Attribut (eigentlich ohne es)? Höchstwahrscheinlich wird diffuse Farbe falsch berechnet, aber in meinem Beispiel (auf der Kugel) sieht es ziemlich zufriedenstellend aus. Ich hoffe, es wird jemand anderem helfen.

BEARBEITEN

Übrigens, um einen normalen & amp; In einer Model-View-Matrix verwende ich den folgenden Code:

%Vor%     
Nolesh 28.04.2015, 00:45
quelle