Ray Casting
Moderator: Rockford
- Dr. Irata
- Beiträge: 1356
- Registriert: 24.08.2021 14:40
- Has thanked: 204 times
- Been thanked: 500 times
- Kontaktdaten:
Re: Ray Casting
darüber habe ich tatsächlich auch nachgedacht, eine Stelle nach dem Komma würde ja auch durchaus reichen... das Problem ist dann aber immer noch die Geschwindigkeit. Ich könnte dann zwar einigermaßen ausreichend "rechnen" - wobei die Distorsion mit D x cos (alpha) würde ich trotzdem mittels Tabelle bestimmen müssen - aber das würde deutlich mehr CPU-Last bedeuten.
-
JoSch
- Beiträge: 346
- Registriert: 25.08.2021 21:40
- Has thanked: 159 times
- Been thanked: 126 times
- Kontaktdaten:
Re: Ray Casting
Der Vorteil von FP ist doch erstmal, dass man z.B. die Zahlen einfach als Ganzzahlen addiert. Man muss bei der Multiplikation zwar die Stellen korrigieren, aber das geht mWn mit Shiften.
- Dr. Irata
- Beiträge: 1356
- Registriert: 24.08.2021 14:40
- Has thanked: 204 times
- Been thanked: 500 times
- Kontaktdaten:
Re: Ray Casting
... ja klar, aber beim Raycasting ist am Ende alles so zeitkritisch, daß ich besser gar nichts rechne...
- Dr. Irata
- Beiträge: 1356
- Registriert: 24.08.2021 14:40
- Has thanked: 204 times
- Been thanked: 500 times
- Kontaktdaten:
Re: Ray Casting
Im Grunde ist der Ablauf folgender:
Da ist diese 2D-Matrix â 30x30 Größe. In dieser Matrix sind Wände und irgendwo der Player.
Der Player läuft in dieser 2D-Matrix herum und kann sich jeweils nach rechts oder links drehen, nach vorne oder nach hinten bewegen.
Der Player schaut nach vorne und hat ein FOV (field of view) von 40 Grad. Insgesamt nutze ich dann 19 Sichtstrahlen in einem Winkel von je 2,5 Grad - also von 0 (Hauptsichtstrahl nach vorne) nach -20 Grad (das sind dann 8 Blickstrahlen -2,5 Grad, -5 Grad ... -20 Grad, 0 Grad, 2,5 Grad ... 5 Grad .... 20 Grad) also 19 Sichststrahlen. Alle diese 19 Strahlen laufen nacheinander nach vorne bzw. schräg vorne (hier braucht man den Bresenham-Algorithmus) bis jeweils ein Treffer erfolgt. Anhand des x- und y-Wertes wird dann mit Pythagoras die Distanz berechnet, mit cos Blickwinkel dann die Distorsion korrigiert und dann kommt noch 1/x (nah dran kleiner Wert = hohe Mauer) x ein Faktor (ich nehme 40 - hängt von der Bildschirmauflösung dann ab). Dies wird also alles 19x durchlaufen und berechnet und abgespeichert und im nächsten Schritt wird dann diese Block der 19 Distanzen auf den Bildschirm gezeichnet uns so entsteht dann aus der 2D-Matrix ein 3D-artiges Bild ... und alles quasi in Echtzeit. Bei jeder Joystickbewegung muss das komplett durchgeführt werden!
Da kann man nicht viel rumrechnen mit unserer kleinen 6502 CPU
Da ist diese 2D-Matrix â 30x30 Größe. In dieser Matrix sind Wände und irgendwo der Player.
Der Player läuft in dieser 2D-Matrix herum und kann sich jeweils nach rechts oder links drehen, nach vorne oder nach hinten bewegen.
Der Player schaut nach vorne und hat ein FOV (field of view) von 40 Grad. Insgesamt nutze ich dann 19 Sichtstrahlen in einem Winkel von je 2,5 Grad - also von 0 (Hauptsichtstrahl nach vorne) nach -20 Grad (das sind dann 8 Blickstrahlen -2,5 Grad, -5 Grad ... -20 Grad, 0 Grad, 2,5 Grad ... 5 Grad .... 20 Grad) also 19 Sichststrahlen. Alle diese 19 Strahlen laufen nacheinander nach vorne bzw. schräg vorne (hier braucht man den Bresenham-Algorithmus) bis jeweils ein Treffer erfolgt. Anhand des x- und y-Wertes wird dann mit Pythagoras die Distanz berechnet, mit cos Blickwinkel dann die Distorsion korrigiert und dann kommt noch 1/x (nah dran kleiner Wert = hohe Mauer) x ein Faktor (ich nehme 40 - hängt von der Bildschirmauflösung dann ab). Dies wird also alles 19x durchlaufen und berechnet und abgespeichert und im nächsten Schritt wird dann diese Block der 19 Distanzen auf den Bildschirm gezeichnet uns so entsteht dann aus der 2D-Matrix ein 3D-artiges Bild ... und alles quasi in Echtzeit. Bei jeder Joystickbewegung muss das komplett durchgeführt werden!
Da kann man nicht viel rumrechnen mit unserer kleinen 6502 CPU
Wer ist online?
Mitglieder in diesem Forum: Pmetzen und 1 Gast