Raycasting
-
Hallo,
http://ffs-net.next-dimension.org/Tutorials/RaycastingTutorial.pdf
meint ihr es ist möglich so eine einigermaßen anständige Raycasting-Engine zu schreiben? Klar, dass das nich total genau ist, aber damit sollten sich doch wenigsten Ergebnisse erzielen lassen, sodass man die Map erkennen kann.
Was meint ihr dazu?
Mfg
-
es gibt doch genug spiele die sowas nutzten, wo genau sollte das problem dabei sein?
-
Naja, weil man das normalerweise anders macht, indem man die Schnittpunkte des Strahls mit dem Koordinatensystem berechnet. Das ist viel genauer, aber rechen aufwendiger. Da mein "old school game" aber auf einem 286er laufen soll, kommt das nicht in Frage ^^
-
Suelle schrieb:
Naja, weil man das normalerweise anders macht, indem man die Schnittpunkte des Strahls mit dem Koordinatensystem berechnet.
Naja, ray-casting hat einige bedeutungen, wenn man den ersten strahl beim raystracing oder bei physic queries schickt, nennt man das auch ray-casting. das ist aber nicht im context von "oldschool game rendering" ala doom.
Das ist viel genauer, aber rechen aufwendiger.
der DDA algorithm den man normalerweise bei spielen verwendet(e) ist schon sehr genau und schnell.
Da mein "old school game" aber auf einem 286er laufen soll, kommt das nicht in Frage ^^
286 *hehe*, soll das auf nem toaster laufen?
ich denke eines der bekanntesten online tutorials darueber wie die tech damals war, ist http://www.permadi.com/tutorial/raycast/index.html
-
Hi,
diese Tutorial ist mir bekannt. Das kann ich vielleicht mit einem 486er machen, aber der 286 ^^ ohje...
Gibt es da nicht noch andere Möglichkeiten? (evtl. so ähnlich wie aus dem Tutorial von meinem ersten Post, nur genauer und schneller?)Danke für deine Hilfe!
Mfg
EDIT: Ich könnte auch einfach etwas wie DARK GDK nehmen und auf meinem Q9550 laufen lassen, aber dann macht's ja keinen Spass
-
Suelle schrieb:
Hi,
diese Tutorial ist mir bekannt. Das kann ich vielleicht mit einem 486er machen, aber der 286 ^^ ohje...
es beschreibt den algorithmus, die implementierung ist dir ueberlassen.
Gute implementierungen liefen auf weitaus langsammeren cpus als 286, z.b. auf der 65816 (3,58MHz) eines supernindendos oder auf dem ARM7 (16mhz) eines GBAs.Gibt es da nicht noch andere Möglichkeiten? (evtl. so ähnlich wie aus dem Tutorial von meinem ersten Post, nur genauer und schneller?)
Raycasting mittels DDA ist das ziemlich schnellste. Es gibt noch ein paar optimierungen, aber am grundsaetzlichen algorithmus aendert es nichts.
EDIT: Ich könnte auch einfach etwas wie DARK GDK nehmen und auf meinem Q9550 laufen lassen, aber dann macht's ja keinen Spass
klar, oder angeln gehen
-
Hi,
du meinst also, wenn ich mein Spiel nach dem Schema aus dem ersten Tutorial programmiere, sich einigermaßen gute Ergebnisse erreichen lassen? Das zweite Tutorial "nachzuprogrammiern" ist für mich als Einstieg evtl. etwas schwierig...
Mfg
-
wenn du die implementierung des algorithms sehr gut machst, hast du ne gute chance.
als motivation: http://www.youtube.com/watch?v=zfK5zwLYhZM
-
Eig. war meine Frage ja ob ich das mit dem Algorithmus des ersten Tutorials genau so weit komm, wie mit dem aus dem erweiterten Tutorial
Weil der aus dem ersten ist ja einfacher...
Oder war das schon deine Antwort? Vllt. steh ich grad aufm Schlauch
-
der algorithm aus dem tutorial ist relativ primitiv und dient wohl nur der veranschaung. Entsprechend sollte er 10 bis 100 mal langsammer sein als mein vorschlag.
Aber da du ja sagst, dass du ein frischling bist, waere es wohl ratsam erstmal damit anzufangen, auf ner aktuellen cpu waere das selbst in java fluessig (ich sprech aus erfahrung).
spaeter kannst du ja immer noch optimieren bzw die strahlverfolgung verbessern.
-
Hi,
okay. nur was ich nicht ganz verstehe ist, warum die Berechnungen aus dem aufwendigen Tutorial (das ist doch das was du meinst oder?) weniger Leistung benötigen obwohl diese umfangreicher sind. Wie kommt das? Oder hängt das von der Umsetzung ab? Dazu noch eine weitere Frage: Wie meinst du könnte man die Rechnungen aus dem ersten Tut verbessern, ausser die genauigkeit zu verändern?
Mfg
P.S: Ich hoffe ich nerve mit meinen Fragen nicht
-
Suelle schrieb:
nur was ich nicht ganz verstehe ist, warum die Berechnungen aus dem aufwendigen Tutorial (das ist doch das was du meinst oder?) weniger Leistung benötigen obwohl diese umfangreicher sind.
es bedarf nunmal mehr aufwand etwas komplexeres zu beschreiben. Oft entsteht die komplexitaet durch optimierung von algorithmen.
um es mal am beispiel der multiplikation zu veranschaulichen:
simples tutorialint mul(int a,int b) { c=0; for(int i=0;i<b;i++) c+=a; return c; }
komplex
int mul(int a,int b) { c=0; for(int i=0;i<32;i++) if(b&(1<<i)) c+=a<<i; return c; }
Wie kommt das?
wie du siehst, ist die erste version einfach, die zweite aufwendig, jedoch laeuft die zweite in immer 32 schleifendurchlaeufen waehrend erstere version in b durchlaeufen laeuft, wenn b 100000 ist, 100000mal.
Oder hängt das von der Umsetzung ab?
algorithmen sind erstmal unabhaengig von der umsetzung, wobei auch die umsetzung natuerlich einfluss hat. im regelfall ist der algorithmus ausschalggebender als die implementierung, jedoch baden sich viele programmierer in der truegerischen sicherheit etwas gut gemacht zu haben, nur weil die wahl des algorithms vermeintlich optimal war.
kurz: beides ist wichtig.Dazu noch eine weitere Frage: Wie meinst du könnte man die Rechnungen aus dem ersten Tut verbessern, ausser die genauigkeit zu verändern?
meinst du echt ich sollte dir den ganzen spass verderben?
P.S: Ich hoffe ich nerve mit meinen Fragen nicht
keine sorge, ich bin hier nicht verpflichtet zu antworten
-
Hi,
Danke, dann mach ich mich mal ans Werk
meinst du echt ich sollte dir den ganzen spass verderben?
Also ein kleiner Denkanstoss wär net schelcht
mfg
-
Ich hab das mal auf nem Java Handy versucht. Ist letztlich an der miesen Grafikleistung meines Handys gescheitert. Auf ordentlichen Geräten hab ich aber schon voll texturierte Raycaster mit guter Geschwindigkeit laufen sehen.
Als Basis-Optimierungen kann ich dir den bereits erwähnten DDA Algo für den Strahl/Wand Check sowie vorberechnete cos/sin Tabellen empfehlen. Da war auch noch irgendwas mit Bit-Shifting und dem Raster/Koordinatensystem, aber das ist leider zu lange her
-
Hi,
gibt's zu dem DDA algo auchn Tutorial?
mfg
-
Cpp_Junky schrieb:
Ich hab das mal auf nem Java Handy versucht. Ist letztlich an der miesen Grafikleistung meines Handys gescheitert. Auf ordentlichen Geräten hab ich aber schon voll texturierte Raycaster mit guter Geschwindigkeit laufen sehen.
daran hab ich mich auch versucht, bzw voxel, aber da ist ja nicht viel unterschied
http://www.rapso.de/ranz/fleur/003.pngSuelle schrieb:
gibt's zu dem DDA algo auchn Tutorial?
ja, wie ich schon ein paar mal sagte, steht das wohl in dem link den ich dir gab.
wobei, wie ich dir auch schon sagte, als purer anfaenger wirst du schon "spass" mit der simplen version haben die du im ersten post verlinkt hast.
-
rapso schrieb:
...
daran hab ich mich auch versucht, bzw voxel, aber da ist ja nicht viel unterschied
http://www.rapso.de/ranz/fleur/003.png
...Mario Kart Clon?
BTW: Hatte Mario Kart Voxelgrafik?!
-
naja, nur voxel grafik mit nem mario level
nein, mario cart hatte "mode 7" rendering. (da gibt es genug info im netz zu, denke ich)