Ich schreibe eine kleine isometrische 2D-Engine in C ++ und versuche, Echtzeit-Schattenwurf zu implementieren. Ich bin einem einfachen Ansatz gefolgt, der auf dieser Seite beschrieben wird, und hier ist das Ergebnis (das Licht befindet sich an derselben Position wie der gelbe Würfel):
Das Ergebnis ist sehr schön, aber es fehlen Schatten an den Wänden und auf den Würfeln. Hier ist ein Beispiel, wie es aussehen sollte (ich habe erwartete Schatten in Grün gezeichnet):
Alle gezeichneten Würfel bestehen einfach aus 3 2D-Quadern an einer XY-Position und mit einer Z-Tiefe (z = x + y). Ich benutze OpenGL mit einer orthographischen Matrix (glOrtho). Schatten werden mit dem Schablonenpuffer gezeichnet.
Ich bin auf der Suche nach Ressourcen oder Lösungen, die mir helfen, diese Implementierung des Schattenwurfs abzuschließen.
Danke vielmals!
Antworten:
Bei Dach und Wänden können Sie versuchen, Schnittpunkte zwischen Ihren Wandsegmenten und den erzeugten Schattenbereichen zu bestimmen. Sie benötigen ein Rendering Ihrer Schatten in zwei Durchgängen. Zuerst macht man das, was man heute macht (im Speicher). Der zweite Durchgang berechnet die Schnittpunkte von Dach und Wand. Letzte Stufe ist echtes Rendern. DeadMG ist falsch, das können Sie tun.
Hinweis: Für das Dach müssen Sie den Schattenbereich und den Dachbereich schneiden.
quelle
Grundsätzlich kann nicht getan werden, wonach Sie suchen. Sie möchten eine Reihe von 2D-Objekten aufnehmen und Schatten werfen lassen, als wären sie 3D-Objekte. Wenn Sie vollständige 3D-Schatten erhalten möchten, benötigen Sie 3D-Objekte.
quelle
Die beschriebene Lösung ist nicht vollständig 3D, da er keine vollständige 3D-Lösung benötigt. Es wird so aussehen, aber es ist nicht so. Die Erzeugung von Schattenwurf muss als Schnittmenge zwischen Volumen betrachtet werden. Was er braucht, ist weniger kompliziert. Denken Sie daran, (wenn Sie gekannt haben), Schicksale und Schicksale wie Rendering-Engine. Alle Bearbeitungen wurden in zwei Dimensionen durchgeführt.
quelle
Angesichts der Tatsache, dass Sie möchten, dass dieses Spiel klein ist, können Sie sagen, dass die aktuelle Schattenimplementierung gut genug ist?
Ich gebe zu, dass ich dies nicht in Aktion gesehen habe, das heißt, ich habe nicht gesehen, wie störend oder nicht störend die Schattenunvollkommenheiten sein werden, wenn dieses Spiel mit dynamischen Objekten und dynamischen Lichtquellen live läuft, aber nach Ihren Bildern zu urteilen. ' Ich bin sehr versucht zu sagen, dass es gut genug ist, und konzentriere mich jetzt darauf, das Spiel zu Ende zu bringen. Wenn die aktuelle Implementierung zufällig klein ist und schnell ausgeführt wird und das Beheben von Problemen, die Sie für problematisch halten, den Code groß und langsam macht, sollten Sie sich keine Gedanken über diese Schatten machen.
Ich weiß, ich weiß, dass es eine schlechte Praxis sein könnte, wenn man vorschlägt, das Problem nicht zu lösen. Trotzdem möchte ich ehrlich sagen, dass es wirklich gut ist, wenn Sie einen kleinen Footprint für Ihren Code wünschen.
quelle