Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

OpenGL Frustum (QuadIn)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 23.05.2012, 09:34    Titel: OpenGL Frustum (QuadIn) Antworten mit Zitat

Ich habe mich einer fertigen TFrustum Klasse bedient, das ursprüngliche Original ist von "Digiben(Ben Humphrey) of gametutorials.com"

Ich hab mir die Klasse für meine Zwecke etwas abgespeckt um sie meinem Quadtree hinzuzufügen.

Mein Problem besteht darin das ich die berechnung nur schwer verstehe,
nach dieser Klasse kann ich prüfen ob sich ein Punkt innerhalb des Frustums befindet, oder eben nicht.
So kann ich eben problemlos abfragen ob sich auch ein Quad, GANZ oder auch nur ein Punkt meines Quads im Frustum befindet...

Das Problem: habe ich nun ein recht grosses Quad, das zwar innerhalb des Frustums liegt, dessen eckpunkte aber weit ausserhalb, weiss ich nicht wie ich das richtig prüfe und bräuchte hier etwas hilfe

Die entscheidene Funktion:
Code:

Function Frustum.QuadIn(byval x as single, byval z as single, byval sizex as single, byval sizez as single) as integer
    Dim as single xx,yy,zz
    For i as integer = 0 to 5
          '' E_TOP_RIGHT
         xx = x + sizex
         yy = 0
         zz = z - sizez
         if (Planes(i,A) * xx + Planes(i,B) * yy + Planes(i,C) * zz + Planes(i,D) > 0) then         
               continue for
         end if
         
      '' E_TOP_LEFT
         xx = x - sizex
         yy = 0
         zz = z - sizez
         if (Planes(i,A) * xx + Planes(i,B) * yy + Planes(i,C) * zz + Planes(i,D) > 0) then         
               continue for
           end if

      '' E_BOTTOM_RIGHT
         xx = x + sizex
         yy = 0
         zz = z + sizez
         if (Planes(i,A) * xx + Planes(i,B) * yy + Planes(i,C) * zz + Planes(i,D) > 0) then         
               continue for
           end if

      '' E_BOTTOM_LEFT
         xx = x - sizex
         yy = 0
         zz = z + sizez
         if (Planes(i,A) * xx + Planes(i,B) * yy + Planes(i,C) * zz + Planes(i,D) > 0) then         
               continue for
         end if
         
      return false
    next i
    return TRUE
End Function


Visuelles Beispiel (Dieses Quad würde von dieser Funktion nicht berücksichtigt)

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz