Ich arbeite derzeit am Aufbau eines Spiels, das auf einem Planeten ist, die Art und Weise, in der ich plane, die Daten zu speichern ist in 6 2dimensionalen Arrays, die heightmaps um die Kugel (auf den Seiten eines Würfels) sind. Das Problem, das ich habe, ist dieses, gegeben einen normalisierten Vektor, der nach außen von der Mitte der Kugel zeigt, wie kann ich diese zwei Dinge bestimmen:
- Die Ebene, die sie schneidet
- Die x/y-Koordinaten sollte ich in meinem 2d-Array nachschlagen, um die Höhe zu erhalten.
Meine derzeitige Lösung ist diese (mit XNA):
-
Konstruieren Sie einen Strahl, der von [0,0] entlang des angegebenen Richtungsvektors ausgeht. Führen Sie eine Schleife durch jede Fläche und führen Sie einen Strahl/Ebenenschnitt durch (eine Methode, die vom XNA-Framework bereitgestellt wird), um den Abstand zum Schnittpunkt zu ermitteln. Wählen Sie die nächstgelegene Ebene (kürzeste Entfernung zum Schnittpunkt)
-
Nehmen Sie den 3D-Punkt und konvertieren Sie ihn in einen 2D-Punkt, der als Array-Lookup verwendet werden kann, um den Radius zu finden (dies ist der Teil, für den ich die Mathematik nicht ausarbeiten kann oder keine Verweise über Google finde).
Eine hilfreiche Einschränkung ist, dass sich das Kugel-Würfel-System um den Ursprung dreht.
Das Problem, das gelöst werden muss, ist also folgendes: Wie bestimme ich bei einem Richtungsvektor, wo er den umgebenden Würfel schneidet? Wie erhalte ich dann mit diesem Ergebnis den richtigen Wert in einem 2D-Array, das auf die Fläche dieses Würfels "gemalt" wird?