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

Aktuelle Zeit: Fr Jul 18, 2025 00:09

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frustum Culling Terrain
BeitragVerfasst: Di Okt 19, 2004 13:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,

Ich bin dabei einen Terrainrenderer zu schreiben. hab das Terrain jetzt in einen Qaudtree gepackt und will nun die nicht sichtbaren Bereiche per Frustum Culling ausblenden. Jeder Node des Quadtrees enthält die X und Y Anfangs- und Endwerte. ich benutze die Unit von delphigl.de, nur irgendwie funktioniert das ganz nicht so wie es soll.

Code:
  1.  
  2. procedure TNode.Check(const FVertices: TVertices);
  3. var
  4.   I:Integer;
  5.   XCenter, YCenter, ZCenter, Xsize, ysize, Zsize: single;
  6. begin
  7.   XCenter := (XEnd-XStart)/2+XStart;
  8.   YCenter := (YEnd-YStart)/2+YStart;
  9.   ZCenter := 128;
  10.   XSize := (XEnd-XStart)/2;
  11.   YSize := (YEnd-YStart)/2;
  12.   ZSize := 128;
  13.   If Frustum.IsBoxWithin(XCenter, YCenter, ZCenter, XSize, YSize, ZSize) then
  14.     If smallest then
  15.       Draw(FVertices)
  16.     else
  17.       For I := Low(Children) to High(Children) do
  18.         Children[I].Check(FVertices);
  19. end;
  20.  
  21. procedure TQuadtree.DrawQuadtree(const Vertices: TVertices; drawVertices, drawNodes: Boolean);
  22. begin
  23.   Frustum.Calculate;
  24.   If drawNodes then
  25.     MainNode.DrawNode;
  26.   If drawVertices then
  27.     MainNode.Check(Vertices);
  28. end;
  29.  


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 13:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was funktioniert denn nicht?

Wieso gibt es leere Knoten? Ist das nicht wie beim Octree, dass leere Knoten einfach weggelassen werden?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 13:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,

es gibt keine leeren Knoten, die Linien auf dem Bild zeigen die Knoten, bei denen das Frustum Culling nicht erkennt, dass man sie sieht. Wenn ich direjt entlang der Z Achse gucke und mich vor oder zurück bewege geht es, aber sobal ich mich drehe werden Teile des Terrains nicht gerendert obwohl ich sie sehe. Ich bewege meine Kamera mit Hilfe von 3 lokalen Vektoren und einer Rotationsmatrix wie im Tut "Objekte immer um die eigene(n) Achse(n) drehen..." nur das ich das ganze invertiere.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 16:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Code:
  1. ZCenter := 128;

Hast du dein Koordinatensystem gedreht? Normalerweise spart man sich bei einem Quadtree die Höhenkoordinate, also Y. Ansonsten dürfte es eigentlich keine Probleme beim Frustum Culling geben, habe die Unit selbst mit Octrees im Gebrauch. Aber lad mal ne Demo hoch damit man erkennen kann woran es evtl. liegt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 17:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,

habs's angehängt, is noch ziemlich unoptimiert und noch Testcode drin müsste aber zu lesen sein :). Die Heightmap und der Quadtree sind in die entsprechenden Units ausgelagert. Der Quadtree arbeitet mit Rechtecken. Das mit dem Z hab ich nur gemacht, damit ich eine Box von 0 bis 255 (maximale Höhe) habe.

Quellcode: hier


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 18:41 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dann sollte die Mitte aber bei 127 liegen. :wink:

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 18:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Den Quelltext kann ich mir nicht ansehen, da dort einige Units fehlen die ich selbst nicht besitze (so Sachen wie geometry.pas oder glBmp.pas nutze ich schon lange nicht mehr). Aber was ich ursprünglich mit meinem oberen Posting sagen wollte : Im Normalfall ist die Höhe Y und nicht Z, deshalb habe ich die Codestelle zitiert.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 19, 2004 22:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,

das mit Z stimm schon, kann ich ja leicht ändern. Wäre nur schön wenn sich vielleicht einer mal den Code angucken könnte oder eine Vermuten äußern könnte worans liegt, mit 10 FPS kommt man dummerweise nicht weit :( Die Boxen werden auf jedenfall richtig anggeben, hab sie mir mal anzeigen lassen. Es scheint auch, dass es geht wenn ich entlang der X-Achse gucke, abe jemehr ich mich zur Y-Ache hin drehe, desto schlechter wirds.


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Majestic-12 [Bot] und 8 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]