gluPerspective Problem / Raycasting

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Grimasso
Beiträge: 59
Registriert: 22.07.2010, 09:05

gluPerspective Problem / Raycasting

Beitrag von Grimasso »

Moinsen,

ich verwende Raycasting zum Auffinden sichtbarer Tiles in meiner Oldschool kantigen 2.5D Engine. Anscheinend ist mein FOV jedoch ein anderes als das was OpenGL in gluPerspective angegeben wird. Schaue ich mir meine Map im 2D Editor mit Sichtfeld an, so erscheint das Sichtfeld größer, als das was ich auf dem Bildschirm sehe. Muss ich da noch irgendwas korrigieren?! Bei sehr engen Winkeln werden einige sichtbare Flächen nicht gefunden und ich glaube es liegt am FOV (siehe Screens)
Wand nicht gefunden
Wand nicht gefunden
2D Editor mit Sichtfeld
2D Editor mit Sichtfeld
REVERT3D - 2.5d oldschool graphic/game engine http://revert3d.blogspot.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: gluPerspective Problem / Raycasting

Beitrag von Schrompf »

Wenn Dein FOV von dem von gluPerspective abweichen würde, müsstest Du am Rand des Bildschirms entweder zu wenig oder zu viele Tiles malen. Das ist aber nicht der Fall... zumindest das "zu wenig" können wir anhand des Bilds mit Sicherheit ausschließen :-)

Dein Problem ist hier, dass Du nur blockweise prüfst. Egal, wie dicht Du Dein Netz aus Strahltests legst, es wird immer die Chance geben, dass Du eine kleine Lücke zwischen zwei Tiles verpasst, durch die ein Tile dahinter doch sichtbar wäre. Wenn Du wirklich sicher Tiles vom Rendern ausschließen willst, müsstest Du 2D-Volumen aufstellen und Tiles dagegen prüfen. Und selbst das geht nur für komplett sichtblockierende Tiles wie Deine Quader hier... sobald ein Tile teilweise durchsichtig ist wie z.B. ein Zaun, Baum oder sonstwas, versagt auch die Volumenprüfung.

Meine Empfehlung: beschränke die Sichtbarkeitsprüfung auf das Frustum - sprich auf das durch gluPerspective bestimmte Sichtvolumen. Die Verdeckung von Tiles durch andere Tiles kannst Du meiner Meinung nach ignorieren. Du bekommst in praktisch jedem Fall fehlerhafte Ergebnisse und investierst außerdem mehr Rechenzeit, als Du durch Einsparung der Tile-Renderings gewinnst.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Grimasso
Beiträge: 59
Registriert: 22.07.2010, 09:05

Re: gluPerspective Problem / Raycasting

Beitrag von Grimasso »

Jo, ich bin mir sogar ziemlich sicher das ich zu viel zeichne und der Winkel zwischen den Strahlen durch mein falsches FOV vermurkst wird. Ein klassischer Raycaster à La Wolf3d macht doch im Prinzip das selbe, oder nicht?
REVERT3D - 2.5d oldschool graphic/game engine http://revert3d.blogspot.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: gluPerspective Problem / Raycasting

Beitrag von Schrompf »

Nein, ein Raycaster ala Wolfenstein schickt pro Bildschirmspalte einen Strahl! Demzufolge kann er den ersten Treffer nehmen und malt die komplette Spalte mit dem Tile aus.... der läuft nie Gefahr, dahinter noch ein Tile zu übersehen.

Renderst Du in Software oder Hardware?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Grimasso
Beiträge: 59
Registriert: 22.07.2010, 09:05

Re: gluPerspective Problem / Raycasting

Beitrag von Grimasso »

Ich berechne ebenfalls pro Spalte einen Strahl. Dabei verfolge ich den Strahl über alle möglichen Schnittpunkte (Können per Definition ja nur auf dem Raster liegen) und prüfe, welche Tiles dabei berührt werden. Treffe ich auf einen soliden Block oder auf das "Nichts", endet die Strahlverfolgung, an sonsten gehts im Raster weiter. Die erfassten soliden Blöcke und Bodentiles werden anschliessend ganz normal via OpenGL gerendert, anstatt der klassischen Raycasting Methode (Vertikale Pixelreihe skalieren und füllen). Was meinst du denn eigentlich genau mit "dahinter" ?
REVERT3D - 2.5d oldschool graphic/game engine http://revert3d.blogspot.com
Benutzeravatar
Grimasso
Beiträge: 59
Registriert: 22.07.2010, 09:05

Re: gluPerspective Problem / Raycasting

Beitrag von Grimasso »

Ok, hat sich erledigt. Das Ding hat mich so genervt, das ich den ganzen Kram weggeschmissen und durch einen neuen Ansatz in Form von DDA Raycasting über Vektoren anstatt Winkelfunktionen ersetzt habe. Falls es irgendwen interessiert, kann ich dieses Tutorial empfehlen http://www.student.kuleuven.be/~m021692 ... sting.html
REVERT3D - 2.5d oldschool graphic/game engine http://revert3d.blogspot.com
Antworten