Hallo^^
Ich hänge schon länger an einem Problem und stehe einfach auf dem Schlauch. Es geht um meine Raycasting-Engine, ich will Sprites einbauen, die nicht immer parallel zur ProjectionPlane sind bzw der Kamera immer zugewendet. Man kann sich das Sprite also vorstellen wie eine große freistehende Wand um die man herumlaufen kann. Um ein solches Sprite zu rendern brauche ich von jedem Ray der von der Cam ausgeht, dann die ProjectionPlane "ganzzahlig schneidet" (das sind die späteren Pixel, es gibt eben keine halben Pixel, nur Ganze) und irgendwann auf das Sprite trifft diverse Informationen:
- durch welchen "Pixel"/Zahl der ProjectionPlane läuft der Ray?
- Distanz: Distanz zwischen Cam und Treffpunkt des Rays auf dem Sprite
- TexScaleFactor: Ein Sprite ist immer 1 Einheit groß und der TexScaleFactor gibt an wo das Sprite relativ zu einer seiner Ecken getroffen wurde. Es werden also Werte zwischen 0 und 1 erzeugt
Die Cam-Rotation wird übrigens vorher "rausgerechnet" und spielt somit keine Rolle, genau wie die Cam-Position. Die Cam ist der Ursprung des Koordinatensystems und vereinfacht so das Rechnen. Nur das Sprite hat einen Variablen Winkel. Sprites die sich "links" von der Kamera befinden müssen nicht gerendert werden.
Den Start- und EndPixel (auf der ProjektionPlane) kann man einfach bestimmen. Man kennt P1 und P2. Also gilt:
dtPP / offsetPP = P.x / P.y
offsetPP ist dann der Pixel auf der ProjectionPlane, für die obere Grenze muss man auf eine ganze Zahl aufrunden, für die untere Grenze einfach abrunden. Nur für die Rays zwischen Oberer und Untere Grenze kommt ein Treffpunkt auf dem Sprite in Frage.
Hat irgendjemand Ideen wie man das Problem (am besten auch noch performant ) lösen könnte? Hatte bisher ein paar Ansätze ausprobiert (zielten eigentlich immer darauf ab irgendwo lerpen zu können, dass funktioniert aber leider nie...). Gibt es vllt irgend eine Vektor/Matrix-Keule? Wäre richtig froh, wenn das mal funktioniert xD
lg
Ich hänge schon länger an einem Problem und stehe einfach auf dem Schlauch. Es geht um meine Raycasting-Engine, ich will Sprites einbauen, die nicht immer parallel zur ProjectionPlane sind bzw der Kamera immer zugewendet. Man kann sich das Sprite also vorstellen wie eine große freistehende Wand um die man herumlaufen kann. Um ein solches Sprite zu rendern brauche ich von jedem Ray der von der Cam ausgeht, dann die ProjectionPlane "ganzzahlig schneidet" (das sind die späteren Pixel, es gibt eben keine halben Pixel, nur Ganze) und irgendwann auf das Sprite trifft diverse Informationen:
- durch welchen "Pixel"/Zahl der ProjectionPlane läuft der Ray?
- Distanz: Distanz zwischen Cam und Treffpunkt des Rays auf dem Sprite
- TexScaleFactor: Ein Sprite ist immer 1 Einheit groß und der TexScaleFactor gibt an wo das Sprite relativ zu einer seiner Ecken getroffen wurde. Es werden also Werte zwischen 0 und 1 erzeugt
Die Cam-Rotation wird übrigens vorher "rausgerechnet" und spielt somit keine Rolle, genau wie die Cam-Position. Die Cam ist der Ursprung des Koordinatensystems und vereinfacht so das Rechnen. Nur das Sprite hat einen Variablen Winkel. Sprites die sich "links" von der Kamera befinden müssen nicht gerendert werden.
Den Start- und EndPixel (auf der ProjektionPlane) kann man einfach bestimmen. Man kennt P1 und P2. Also gilt:
dtPP / offsetPP = P.x / P.y
offsetPP ist dann der Pixel auf der ProjectionPlane, für die obere Grenze muss man auf eine ganze Zahl aufrunden, für die untere Grenze einfach abrunden. Nur für die Rays zwischen Oberer und Untere Grenze kommt ein Treffpunkt auf dem Sprite in Frage.
Hat irgendjemand Ideen wie man das Problem (am besten auch noch performant ) lösen könnte? Hatte bisher ein paar Ansätze ausprobiert (zielten eigentlich immer darauf ab irgendwo lerpen zu können, dass funktioniert aber leider nie...). Gibt es vllt irgend eine Vektor/Matrix-Keule? Wäre richtig froh, wenn das mal funktioniert xD
lg