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


  • Mod

    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 ^^


  • Mod

    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 🕶


  • Mod

    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


  • Mod

    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 😉


  • Mod

    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 😉


  • Mod

    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 tutorial

    int 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


  • Mod

    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.png

    Suelle 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?!


  • Mod

    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 🙂 )


Anmelden zum Antworten