Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hallo allerseits,
weil ich in mein hübsches Terrain jetzt Löcher machen will, stehe ich vor folgendem Problem. Das Terrain ist Heightmapbasiert und wird mit einer abgewandelten Variante von Coolcats Shader gerendert. Ich hatte überlegt, dass ich mit hilfe des Stencilpuffers die Stellen wegmaske, wo ich Löcher brauche. Die Ausschnitte stimmen nämlich in keiner Weise mit der Rasterung des Terrians überein, sodass das einfache ausblenden von Quads nicht zielführend wäre.
Any suggestions?
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Der Stencilbuffer ist eher ungeeignet, weil dieser im Screenspace arbeitet und die Tiefe nicht berücksichtigt.
Was willst du den genau mit den Löchern machen? Soll da andere Geometrie rein? Dann rendere ganz einfach diese andere Geometrie und nutze den Z-Buffer. Die Terrainhöhe an der entsprechenden Stelle sollte dann tiefer als deine Geometrie liegen, also z.B. einfach 0. Wenn es ein wirkliches Loch zum durchgucken sein soll wird es kompliziert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Es soll ein wirkliches Loch sein. Für die Stencil-Aktion hatte ich in etwa sowas gedacht: 1. Pass: Terrain, nur in den Tiefenpuffer 2. Pass: Die Schnittflächen in den Stencilpuffer schreiben (mit DepthFunc(GL_EQUAL); ) Tiefenpuffer leeren 3. Pass: Terrain rendern Stencilbuffer leeren und den Rest rendern
Anstatt des Leerens des Tiefenpuffers hatte ich überlegt, ob man den nicht irgendwie erhalten kann und nur den Teil, der von der Stencilgeometrie überschrieben wird, leert. Dann könnte man den zum Optimieren des 3. Pass nehmen.
greetins
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Hm, in der Theorie könnte das sogar funktionieren. Das Problem ist das du identische Geometrie rendern musst um via GL_EQUAL identische Z-Werte zu treffen. Es muss wirklich alles gleich sein, inklusive Transformationsmatrix usw.
Was man aber machen könnte: 1. Pass: glDepthRange(0.05, 1.0); Terrain in Tiefenbuffer rendern 2. Pass: glDepthRange(0.00, 1.0); Schnittflächen in Stencil rendern (mit glDepthFunc(GL_LEQUAL) 3. Pass: Terrain rendern, Stencilbuffer leeren und den Rest rendern
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Gut, dass das nicht einfach wird, identische Geometrie zu erzeugen ist klar, aber ich werds einfach mal versuchen.
greetins
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Also bei WoW wird ein Teil aus den Terrain nicht gerendert und die modeln dann den Übergang mit einer 3D Software und positionieren dann das Model entsprechend so, dass man nicht mehr sieht, dass man einfach nur ein stück raus geschnitten hat.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.