objecte in raycasting-engine



  • hi leute!

    ich hab ne ray-casting-engine (für DOS) geschrieben, die auch schon wunderbar funktioniert (halbtransparente wände (zäune), shading, floor und ceiling-casting usw.) jetzt will ich allerdings auch noch objekte einbauen und hab absolut keinen plan, wie ich das machen soll. ich brauch ja bloß "2d-objekte", d.h. gegenstände die immer nur von vorne sichtbar sind (gegner, säulen usw.) bloß ich kann da ja nicht die ganz normalen wände nehmen und die texturen draufziehen... spätestens wenn ich schräg von der seite guck, seh ich die sachen zweimal und dann auch noch verzerrt... ich hab schon probiert, einfach die werte von dem "virtuellen strahl" (ray) ab- bzw. aufzurunden (kommt auf den winkel an) aber das klappt auch nicht so richtig... bzw. ist das immer noch leicht verzerrt

    hat/kennt da jemand eine allgemeine möglichkeit, objekte (d.h. nur skalierte bitmaps an einer bestimmten stelle richtig darstellen!) in einer raycasting-engine einzuabeuen?? wäre sehr nett!

    cya l8r, todo



  • Eine Möglichkeit wäre diese extra-Bitmaps grundsätzlich auf die Kamera auszurichten. Transformieren mußt Du sie so oder so - und das bedeutet bei manueller Programmierung Clipping, extra-Lighting etc.
    Ich habe noch einen alten Raycasting-Code, der es erlaubt auf Flächen Texturen draufzuspannen, mußt diese Flächen dann halt ggf. wirklich nur auf die Kamera ausrichten.



  • is leichter gesagt, als getan...

    das problem ist ja, dass ich nicht einfach so einen scalierten bitmap zeichnen kann, da ja teile davon von einer vorstehenden ecke/wand verdeckt sein können, d.h. ich muss immer vertikale abschnitte nacheinander zeichnen. ich hab schon folgendes probiert (ansatz) komm aber noch nicht weiter: egal aus welchem winkel der strahl kommt, die koordinaten wo er jedesmal auf das objekt (wird noch als block behandelt) trifft, werden abgerundet und dann werden 0.5 addiert. da habe ich genau den mittelpunkt des blocks, wo ich dann das objekt zeichne. mittels dem pythagoras ist es ganz einfach, den abstand zwischen diesem mittelpunkt und der pos. des spielers auszurechnen. dann kann ich auch mittels acos/asin den winkel, in dem der mittelpunkt liegt, ausrechnen. die höhe des objektes/blocks habe ich mit der distanz auch schon ausgerechnet. die breite ist demzufolge gleich der höhe. was ich jetzt brauche, ist die x-position, auf der der mittelpunkt dargestellt werden würde (erstmal ganz unabhängig davon, ob der bildschirm wirklich so breit ist). dann müsste ich von dieser x-pos. die hälfte der breite/höhe abziehen bzw addieren, um jeweils die äußeren ränder zu bekommen. dann kann ich ganz einfach für jeden auf das objekt eintreffenden strahl (der winkel und die x-pos auf dem screen wird der funktion mitgegeben) ausrechnen, ob er überhaupt gezeichnet wird und wenn ja, welche vertikale linie von der textur genommen wird... das wars dann auch schon 🙂 aber wiegesagt, mein problem ist die x-pos. des mittelpunkts...

    cya l8r, todo


Anmelden zum Antworten