Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 23:33

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Mai 22, 2013 19:04 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mai 22, 2013 21:13 
Offline
DGL Member
Benutzeravatar

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"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 08:36 
Offline
DGL Member

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

mfg

Jeyene


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 09:49 
Offline
DGL Member

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:
  1.   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:
  1.  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.

In der Hoffnung mein Halbwissen ist richtig

eure Jeyene


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.023s | 17 Queries | GZIP : On ]