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.
Nur damit Sie wissen, _might_ erhalten Sie eine bessere Antwort in http://gamedev.stackexchange.com. Es ist aber auch hier Thema. – chbaker0
Danke für den Vorschlag - krank gib es einen drüben. – Brian
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