Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.06.2009, 19:49

Portal System -> Anpassen der Frustum ans Portal

Hi Spieleprogrammierer! Ich möchte in mein Framework und ein Portal-System einbauen. Bevor ich damit anfangen will, will ich jedoch vorher alles bis ins kleinste detail Planen und auch verstehen, denn sonst darf ich wieder alles neu schreiben wenn ein unschöner Fehler auftaucht. Soweit habe ich alles verstanden bis auf eine Sache.

Meine Portale sollen immer 4 Ecken haben, wo jede benachbarte Seite des Rechtecks auch zu einem 90° Winkel steht. So kann es nicht passieren dass ein Portal plötzlich aus 30 Ecken besteht, sondern bleibt immer bei 4 Ecken. Nun möchte ich die ViewFrustum des Portals dem Portal anpassen. Im prinziep wäre das ganz einfach indem ich immer 2 Ecken des Portals nehme und die Camera Position und daraus eine Ebene bilde. Wenn aber das Portal nur halb zu sehen ist geht das nicht. Wenn beispielsweise die ViewFrustum meiner Camera nur das Halbe Portal bedeckt, und die rechte Seite des Portals halt nicht zu sehen ist, dann müsste ich der Rechten Ebene des neuen Frustums mit der Rechten Ebene des Camera ViewFrustum gleich setzen. Wir hatten noch nie Ebenen in der Schule durchgenommen, aber bis dahin kann ich mir das ganze noch zusammen reimen. Hier mal ein Bildchen dazu, damit man das ganze besser versteht:


(Link)


Das Blaue Feld ist das Portal, und die Schwarzen linien an der Seite sollen sie Seiten darstellen. Der Lila Kasten drum herum soll das ViewFrustum der Camera darstellen. Die Orangene Linie soll die neue Rechte Ebene darstellen.

Nun frage ich mich jedoch, wie ich heraus finden kann, ob die Rechte ebene in dem Quadrat ist, oder außerhalb?

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

2

18.06.2009, 23:15

Am einfachsten clippst du das Portal-Quad gegen das Camera-frustum... Falls eine Ebene einen Schnitt verursacht, parametrisierst du diesen und berechnest daraus dann die neue Ebene. Schau dir dazu am besten ein bisschen "3D-Mathematik" an... Also LinePlane-Intersect (recht einfach O(1) ) [einfachste variante]
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

3

18.06.2009, 23:38

Mir ist gerade aufgefallen das das so wie ich es mir gedacht habe eigentlich nicht funktioniert. Auch wenn alle Portale nur aus Rechtecken bestehen, wird es trotzdem irgent wann dazu führen müssen das ein ViewFrustum mal mehr als nu 4 Planes hat. Nun habe ich nochmal ne kleine Skizze gemacht:


(Link)

Schwarz: Portal
Rot: Vorheriges ViewFrustum (kann mehrere Planes haben)

Nun teste ich für jede Ebene im ViewFrustum ob es das Portal schneidet, mit dem verfahren was du gerade nanntest. Wenn dies zutrifft wird der neuen ViewFrustum einfach diese Ebene hinzu gefügt, und falls nicht passiert nix.

Sollte das so funktionieren?

3dcoder

Frischling

Beiträge: 40

Wohnort: Krefeld

  • Private Nachricht senden

4

19.06.2009, 10:34

Hi!

Als erstes solltest du prüfen ob alle Eckpunkte des Portals bereits in deinem
aktuellen Frustum enthalten sind (geht recht flott über signed distance zu den planes)
dann kannst du nämlich deinen aktuellen
Frustum komplett verwerfen und einfach die Kanten des Portals nehmen um
einen neuen Satz von Ebenen zu erstellen ohne irgendeinen Schnittpunkt
ermitteln zu müssen.

Falls das nicht der Fall ist gehe jede Kante des Portals durch und ermittle die
Zustände der Eckpunkte: Im Frustum oder ausserhalb. Falls die beiden Punkte
einer Kante verschiedene Zustände haben, finde den Schnittpunkt der Kante
mit dem Frustum und merke dir den Abschnitt vom Schnittpunkt zu dem Punkt
der im Frustum liegt in einer Liste. Falls die Kante ganz im Frustum liegt,
dann speichere sie ebenfalls. Falls die Kante ausserhalb liegt kann sie
ignoriert werden.

Wenn du das für alle Kanten gemacht hast erhälst du eine Liste von
Kanten die alle sowohl im Frustum liegen, als auch Teil des Portals sind.

Wenn du aus diesen Kanten nun einen neuen Frustum erzeugst hast du
dein zugeschnittenes Portal.

Sollte die Liste leer sein, dann ist dein Frustum bereits klein genug um
ohne zugeschnitten zu werden in das Portal zu passen.

Viele Grüße
Stefan

5

19.06.2009, 16:47

Genau so in der Art meinte ich das! Ich werde jedoch einen kleinen test machen. Eine andere Variante wäre, wenn ich das Frustum immer an das des Portals anpasse. D.h. das jedes neue Frustum auch immer 4 Ebene haben wird, selbst wenn der vorherige Frustum nur die hälfte des Portals abdeckt. Vorteil hierbei ist das man nicht so viele Ebenen testen muss, und wenn man pech hat könnte es ja snst passieren das ein Frustum plötzlich aus 30 Ebenen besteht. Dies versuche ich dadurch du vermeiden, ist zwar nicht mehr so genau, dafür ist die berechnung manchmal ein ganzes stückchen schneller.

Und ich teste nun welches der beiden Varianten die schnellere ist.

Werbeanzeige