Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 23.05.2012, 09:34 Titel: OpenGL Frustum (QuadIn) |
|
|
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)
 _________________
 |
|