Registriert: Mi Mai 22, 2013 18:16 Beiträge: 3
Programmiersprache: Delphi(XE2)
Hallo,
ich habe ein Problem mit dem Frustum Culling verfahren, die Unit habe ich aus dem Tutorialbereich. Es wird dabei einfach überprüft ob die Boundingbox des Objekts im Frustum liegt. Jetzt kommt´s. Ein Objekt verschwindet einfach, bestimmt auch andere an denen ich es nicht merke, obwohl es mehr als eindeutig im Frustum liegt. Ein Bild sagt mehr wie 1000 Worte. Deswegen zwei Bilder im Anhang, bitte auf die Koordinaten der Kamera ausrichtung schauen, Die bewegt sich im 0 komma Bereich.
Bakcface Culling ist aus, ich weiß es nicht woran es liegen könnte.
Danke im Vorraus Jeyene
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Hallo erstmal. Willkommen bei DGL.
Ich kann jetzt leider auf den Screenshots nicht erkennen, woran es liegt bzw. welches Objekt jetzt da verschwindet.
Ein häufiges Problem ist, dass man die Koordinaten der Boundingbox nicht in Weltkoordinaten sondern relativ zum Objekt gespeichert hat. Zumindest hab ich mir dabei schon mal einen Wolf gesucht. Funktioniert es denn wenn du das Frustumculling nur auf den Mittelpunkt des Objekts anwendest, also auf Punkt statt Box?
Vielleicht kannst du dir ja in deinem Debug Fenster auch mal die aktuellen Matrizen ausgeben lassen?
Mir hilft es häufig bei solchen Problemen die Kamera nicht wirr im Raum zu platzieren, sondern glatte Werte zu nehmen mit denen man auch mal eben im Kopf was rechnen kann. (0, 0, 0) mit Blickrichtung positiver Z-Achse oder so was. Und dazu ein FOV von 90°. Dann die Positionen die das Frustumculling ausspuckt ins Debug Fenster und man sieht schön welche Punkte von zwei gedachten Diagonalen im 45° Winkel zur Z-Achse enthalten sind und welche nicht.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Registriert: Mi Mai 22, 2013 18:16 Beiträge: 3
Programmiersprache: Delphi(XE2)
Hallo,
nach stundenlangen probieren habe ich herausgefunden das die Boundingbox Koordinaten global berechnet sind. Wenn ich das Frustumculling nur auf den Mittelpunkt anwende funktioniert es "richtig". Wenn der Mittelpunkt nicht mehr im Sichbereich ist verschwindet das Objekt ganz,auch die Ecken die normalerweise noch im Sichtbereich sind. Falls es hilft ich benutze diesen Modelloader, plus die dazugehörigen Boundingboxes, zweiter Post: viewtopic.php?f=10&t=6982
Registriert: Mi Mai 22, 2013 18:16 Beiträge: 3
Programmiersprache: Delphi(XE2)
Problem gelöst!!
Durch fünf Minunten einfach mal Denkpause machen und eine Tafel Schokolade essen traf es mich wie der Schlag. Für alle die das gleiche Problem haben hier die Lösung: Der Modelloader errechnet NICHT den Ursprung und vom Ursprung aus die Breite, Höhe, Tiefe, er rechnet alle acht Eckpunkte aus sodass diese nur noch mittels glVertex3fv gerendert werden müssen. Die funktion aus der FrustumCulling Klasse Errechnet die Box vom Ursprung aus Plus Breite, Höhe, Tiefe das ergiebt die Fehler.
Code:
if (Frustum[i][A]*(pX-pB) + Frustum[i][B]*(pY-pH) + Frustum[i][C]*(pZ-pT) + Frustum[i][D]>0) then
muss heißen
Code:
if (Frustum[i][A] * (pX) + Frustum[i][B] * (pY) + Frustum[i][C] * (pZ) + Frustum[i][D] > 0) then
Es gibt zwar immer noch diesen Fehler aber das liegt an der Größe und der Perspektivischen verzerrung des Objekts. Das muss anders gelöst werden.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.