2015-03-17 5 views
5

Im Moment arbeite ich an einem OpenGL Planet Rendering. Ich benutze die Tessellation-Pipeline. Bis jetzt läuft es sehr gut, ein Problem zu lösen. Es ist in der Phase, in der ich mich seit Ewigkeiten mit dem Kopf geschlagen habe und das Gefühl hat, dass Fortschritt nicht passiert.OpenGL Planet Generation - Einfaches Matrix-Problem (Planet "Spins" mit Maus)

Zuerst here is a gif von dem, was ich damit zu tun habe. Im Wesentlichen ist mein Problem, dass, wenn die Maus bewegt wird, der Planet so rotiert, als würde er auf die Stelle schauen, auf die die Kamera zeigt.

Es gibt einige grafische Probleme, aber ich wiederhole einfach die gleiche Heightmap über die gesamte Cubemap. Da es an den Seiten nicht passt, gibt es klare Nähte.

Unten ist mein Auswertung Shader:

void main(void) { 
    vec4 p0 = gl_in[0].gl_Position; 
    vec4 p1 = gl_in[1].gl_Position; 
    vec4 p2 = gl_in[2].gl_Position; 
    vec3 p = gl_TessCoord.xyz; 

    Normal_FS_in = mat3(transpose(inverse((MV)))) * (p0*p.x + (p1*p.y) + p2*p.z).xyz; 

    float displacment = texture(tex1, Normal_FS_in).r * 800; 
    gl_Position = MVP*(p0*p.x + (p1*p.y) + p2*p.z) + (vec4(vec3(displacment,displacment,0) * normalize(Normal_FS_in),1)); 
} 

Es ist ziemlich einfach. Der Shader berechnet eine Normale für den Ausgabevertex. Dies wird dann verwendet, um einen Verschiebungswert aus der Höhenkarte zu entnehmen, die eine Würfelkarte ist. Dann wird GL_Position berechnet. Ich habe versucht herauszufinden, ob mein Problem in den Shadern oder im Rest des Pakets liegt.

Meine Versuche haben weitgehend getüftelt. Ich habe alle normal verwandten Dinge in den Evaluierungs-Shader verschoben, anstatt sie im Vertex-Shader zu berechnen und sie an die Kontroll- und Bewertungs-Shader weiterzuleiten.

Das Problem tritt nur auf, wenn die Maus bewegt wird.

Alle Vorschläge wären fantastisch - hoffentlich alles, was ich brauche, ist ein Hinweis in die richtige Richtung.

Edit - Die umgekehrte Transponierung der Modelview-Matrix oder der View-Matrix führt zum Ergebnis im GIF. Die Verwendung der Modellmatrix führt zu Verzerrungen der Normalen, wenn die Kamera bewegt wird, so dass sich das Gelände um den Ort biegt.

+0

Nur damit Sie wissen, _might_ erhalten Sie eine bessere Antwort in http://gamedev.stackexchange.com. Es ist aber auch hier Thema. – chbaker0

+0

Danke für den Vorschlag - krank gib es einen drüben. – Brian

+0

Wenn Sie sich entscheiden, dort zu posten, lesen Sie http://meta.stackexchange.com/questions/64068/is-cross-posting-a-question-on-multiple-stack-exchange-sites-permitted-if-the-qu . Auch: '(p0 * p.x + (p1 * p.y) + p2 * p.z) .xyz 'das sieht funky aus ... willst du die Position des tessellierten Scheitelpunktes interpolieren? Weil ich nicht sicher bin, ob das erreichen wird, was du willst. – chbaker0

Antwort

0

Es könnte eine Reihe von Dingen sein. Hier einige Beispiele: 1) Du hast etwas im Shader durcheinander gebracht (vergiss eine Inverse oder Transform) 2) Du hast die Steuerung falsch angeschlossen (Maus links macht etwas komisch). 3) Das Steuerungsmodell ist durcheinander (Sie bewegen das Ziel und nicht die Kamera). 4) Etwas anderes. 5) Einige/Alle der oben genannten.

Versuchen Sie, ein Bit zu debuggen. Sieht es in Ordnung aus, wenn Sie den Shader vollständig deaktivieren? Zeichnen Sie einfach einen einfachen Würfel (möglicherweise einfacher zu verfolgen als eine Kugel).

Wenn es in Ordnung ist, dann fügen Sie den Shader hinzu, aber tun Sie nichts darin, sehen Sie, ob die Transformationen im Shader sinnvoll sind (ist es immer noch ein Würfel).

Dies sollte helfen, mögliche Ursachen einzugrenzen.