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

Aktuelle Zeit: Mo Jul 14, 2025 21:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Okt 06, 2003 13:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
Habe mir mal das Tut von SoS runtergeladen und habe eine frage dazu. In meinem Spiel bestehen alle Wände aus Faces (Vier Vertices). Jetzt möchte ich prüfen ob ein Face sichtbar ist oder nicht.
Code:
  1.  
  2.     if FFrustum.IsBoxWithin(FFaces.GetFace(i).Vertex1.X,
  3.                             FFaces.GetFace(i).Vertex1.Y,
  4.                             FFaces.GetFace(i).Vertex1.Z,
  5.                             FFaces.GetFace(i).Vertex1.X-FFaces.GetFace(i).Vertex2.X,
  6.                             FFaces.GetFace(i).Vertex1.Y-FFaces.GetFace(i).Vertex4.Y,
  7.                             FFaces.GetFace(i).Vertex1.Z) then
  8.                                //Zeichnen
  9.  
  10.   for i := 5 to 5 do begin
  11.     //Rechnen
  12.   end;
  13.  

Es funktioniert zwar, gibt es eine besere Möglichkeit, wie ich das gemacht habe?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 07, 2003 22:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Nein,wenn du keine erweiterten Techniken verwenden willst,dann ist das Testen der Boundingbox eines Polygons gegen das Frustum immernoch die beste (mir zumindest bekannte) Möglichkeit herauszufinden ob es sichtbar ist.
Allerdings halte ich es für eine sehr schlechte Idee für jedes Face in deiner Szene einen Test gegen das Frustum zu machen.Damit hab ich in meinen Anfangszeiten auch mal rumexperimentiert,und bin zu dem Schluß gekommen,dass der hohe Rechenaufwand (da ja alle Faces getestet werden) in keinem Gegensatz zum erreichten Geschwindigkeitsvorteil steht,sondern eher genau das Gegenteil der Fall ist.Besonders wenn du eine recht komplexe Szene hast,wird das Testen jedes Polygons gegen das Frustum eher eine Verlangsamung mit sich bringen.
Schau dir also mal Raumunterteilungstechniken wie z.B. BSPs oder besser Octrees an,die die Anzahl der nötigen Frustumtests verringern und dir auch geschwindigkeitstechnisch was bringen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 07, 2003 22:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 08, 2003 15:49
Beiträge: 266
Wohnort: Aachen
werd ich machen danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 07, 2003 22:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich habe da noch eine kleine Ergänzung:
Man muß nicht alle Punkte der AABB testen, sondern nur den der am weitesten zum Inneren des Frustums liegt.

V ist der zu testende Punkt, BBox die AABB und plane die Ebene des Frustums.
Code:
  1.  
  2. if plane.normal.x<0 then v.x:=bbox.min.x else v.x:=bbox.max.x;
  3. if plane.normal.y<0 then v.y:=bbox.min.y else v.y:=bbox.max.y;
  4. if plane.normal.z<0 then v.z:=bbox.min.z else v.z:=bbox.max.z;
  5.  


Hier wird davon ausgegangen, das die Normalen von den Ebenen nach außen zeigen. Eventuell muß man die Logik umkehren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 08, 2003 11:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Schneller (und nur ein klein wenig ungenauer) wirds ohnehin, falls man anstelle einer Bounding Box eine Bounding Sphere einsetzt - dann muss man nur den Mittelpunkt derselben testen (und auf Distanz < Radius oder besser Distanz^2 < Radius^2 prüfen)

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.007s | 14 Queries | GZIP : On ]