Registriert: Mi Dez 15, 2004 20:36 Beiträge: 454 Wohnort: Wien, Österreich
so...
Wie bekomme ich die 4 Rays , die aus 4 Ecken meiner Kammera nach ausen "geschossen" sind.
Die 6 Frustumplanes habe ich schon aber ich will jetzt nicht die Schnittstelle jeweils zeier Ebenen suchen oder muss ich das doch so machen?
Das Problem ist nämlich, dass ich manchmal eine Seite der Skybox nicht sehe obwohl ich gerade vor dieser seite stehe, und dass nur weil ich die Ekcke der Skybox nicht im Frusum sehe (Point in Frusum? abfrage wird gemacht).
Jetzt versuche ich es mit RayCasting oder nennt man es so ?
_________________ "Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump
Probier doch mal folgendes:
wenn die vier Seiten, die dein Quad bilden jeweils paarweise an gegenügerliegenden Seiten außerhalb liegen aber in Z-Richtung innerhalb, dann liegt der Quad trotzdem innerhalb (zwar nur teilweise, aber was solls).
Also auf deutsch geasgt:
wenn die PointInFrustrum keinen bool zurückgibt, sondern ein Set=(links, drüber, drunter, zunah, zufern), dann kannst du die Ergebnisse der vier Abfragen vergleichen:
- mind. einer ein leeres set: quad liegt drin
- wenn sich alle ergebnisse ein elemet teilen (z.B. alle links): quad liegt draussen
das waren die einfachen
jetzt musst du kucken, ob gegenüberliegende Kanten deines Quads an gegenüberliegenden Seiten ausserhalb liegen. Dann umschließt dein Quad nämlich den frustrum und ist zumindest teilweise innerhalb.
ich hoffe ich konnte es verständlich erklären.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Mi Dez 15, 2004 20:36 Beiträge: 454 Wohnort: Wien, Österreich
Dieser Posting betrifft zwar nicht die Thematik aber es ist in der Richtung....
Ich habe 2 funktionen gebastelt, in der Hoffnung, dass sich jemand doch zum Thema meldet.
Also:
Verbesserung meines letzten vorschlags:
Die Funtion PointInFrustrum gibt ein Bytewert zurück, der sich wie folgt gestaltet:
Bit 0 gesetzt, wenn der Punkt 'vor' dem Frustrum liegt (also näher als nearclipping)
Bit 1 gesetzt, wenn der Punkt 'hinter' dem Frustrum liegt (also weiter weg als farclipping)
Bit 2 gesetzt, wenn der punkt links ausserhalb liegt
Bit 3 gesetzt, wenn rechts
Bit 4 gesetzt, wenn oberhalb
Bit 5 gesetzt, wenn unterhalb
Bit 6 und Bit 7 immer null
Mehrfachantworten sind möglich, also z.b. 00000101b, wenn er davor UND links ausserhalb liegt.
Wenn jetzt mindestens ein Punkt 00000000b zurückliefert, liegt er innerhalb und du musst dein quad zeichnen.
Wenn die bitweise UND verknüpfung ALLER vier Punkte einen wert <> 00000000b zurückliefert, liegt der quad komplett ausserhalb und du musst nicht zeichnen.
Wenn die bitweise UND Verknüpfung ALLER vier Punkte 00000000b zurückliefert, dann 'umschließt' dein Quad das Frustrum und liegt teilweise drinnen. Dann musst du den Quad auch zeichnen.
Diese Methode ist schneller, wegen bitweisen vergleichen und nicht so umständlich wie mit den sets
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.