1 / 45

BSP Binary Space Partitioning

BSP Binary Space Partitioning. Yves Kronenburg. Binary Space Partitioning - BSP. Gliederung. Motivation Painters Algorithmus BSP Trees BSP Trees 2D BSP Trees 3D. Binary Space Partitioning - BSP. Motivation Painters Algorithmus BSP Trees BSP Trees 2D BSP Trees 3D.

annona
Download Presentation

BSP Binary Space Partitioning

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BSP Binary Space Partitioning Yves Kronenburg

  2. Binary Space Partitioning - BSP Gliederung • Motivation • Painters Algorithmus • BSP Trees • BSP Trees 2D • BSP Trees 3D

  3. Binary Space Partitioning - BSP • Motivation • Painters Algorithmus • BSP Trees • BSP Trees 2D • BSP Trees 3D

  4. Binary Space Partitioning - BSPMotivation

  5. Binary Space Partitioning - BSPMotivation Objekte müssen schnell und korrekt aufgebaut werden!

  6. Binary Space Partitioning - BSPMotivation z-Buffer Algorithmus • Die Szene wird so transformiert, dass die Blickrichtung die positive z-Achse ist. • 2. Das erste Objekt wird in den Frame Buffer geladen. Zusätzlich werden dessen z-Koordinaten in den z-Buffer geschrieben. • Das nächste Objekt wird analysiert. • Wenn die z-Koordinate des Objekts in einem Pixel kleiner ist, als die z-Koordinate des z-Buffers in diesem Pixel, so wird an dieser Stelle der Frame Buffer und z-Buffer mit den neuen Werten überschrieben. • 4. Wiederhole 3. bis alle Objekte durchlaufen.

  7. Binary Space Partitioning - BSPMotivation z-Buffer Algorithmus Nachteile: • Zusätzlicher Speicher für den z-Buffer benötigt • Für jedes Pixel eines Objektes muss ein Test der z-Koordinate stattfinden.

  8. Binary Space Partitioning - BSP • Motivation • Painters Algorithmus • BSP Trees • BSP Trees 2D • BSP Trees 3D

  9. Binary Space Partitioning - BSPPainters Algorithmus

  10. Binary Space Partitioning - BSPPainters Algorithmus 1. 2. 3. 4. 5. 6.

  11. Binary Space Partitioning - BSPPainters Algorithmus • Objekte werden nach Ihrer Entfernung sortiert, weit entferntestes Objekt steht dabei an erster Stelle • Objekte werden komplett gezeichnet, bereits gesetzte Pixel werden einfach überschrieben

  12. Binary Space Partitioning - BSPPainters Algorithmus

  13. Binary Space Partitioning - BSPPainters Algorithmus

  14. Binary Space Partitioning - BSPPainters Algorithmus

  15. Binary Space Partitioning - BSPPainters Algorithmus

  16. Binary Space Partitioning - BSPPainters Algorithmus Objekte, die sich kreisförmig überlappen, lassen sich mit dem PA nicht zeichnen.

  17. Binary Space Partitioning - BSPPainters Algorithmus Dafür müssen Texturen zerschnitten werden

  18. Binary Space Partitioning - BSPPainters Algorithmus Welches Objekt zerschneiden? Wo zerschneiden wir das Objekt? Neusortierung für jeden Blickwinkel! Datenstruktur benötigt, die diese Informationen speichert und uns für jeden beliebigen Blickpunkt schnell ermöglicht, die Szene korrekt aufzubauen.

  19. Binary Space Partitioning - BSP • Motivation • Painters Algorithmus • BSP Trees • BSP Trees 2D • BSP Trees 3D

  20. Binary Space Partitioning - BSPBSP Trees

  21. Binary Space Partitioning - BSPBSP Trees l2 l1 l1 l3 l2 l4 l5 l4 l5 BSP Baum l3

  22. Binary Space Partitioning - BSPBSP Trees Sei h eine Hyperebene. Dann beschreibt h+ den oberen Halbraum zu h und h- den unteren Halbraum. h+ h-

  23. Binary Space Partitioning - BSPBSP Trees Sei h eine Hyperebene. Dann beschreibt h+ den oberen Halbraum zu h und h- den unteren Halbraum. Sei T der BSP Tree und sei S die Menge der Objekte die gezeichnet werden sollen. • Wenn |S| ≤ 1, dann ist T ein Blatt mit der Information über das Objekt in S. • Wenn |S| > 1, dann wird in die Wurzel v von T die Information über h • gespeichert, sowie die Objekte aus S, die komplett in dieser Ebene liegen. • Das linke Kind ist dann die Wurzel des BSP Trees T- mit den Objekten aus S, die • in h- liegen, das rechte Kind die Wurzel des BSP Trees T+ mit den Objekten in h+.

  24. Binary Space Partitioning - BSPBSP Trees Wie können wir aus einem BSP Tree mittels PA unsere Szene erstellen?

  25. Binary Space Partitioning - BSPBSP Trees l2 l1 l1 l3 l2 l4 l5 l4 l5 BSP Baum l3

  26. Binary Space Partitioning - BSPBSP Trees l2 l1 l1 l3 l2 l4 l5 l4 l5 BSP Baum l3

  27. Binary Space Partitioning - BSPBSP Trees AlgorithmusPaintersAlogrithm(T, pview) • Sei v die Wurzel von T • 2. Ifv ein Blatt • 3. thenZeichne die Objekte aus v • 4. elseifpviewεhv+ • 5. thenPaintersAlogrithm(T -, pview) • 6. Zeichne die Objekte aus v • 7. PaintersAlogrithm(T +, pview) • 8. elseifpviewεhv- • 9. then PaintersAlogrithm(T +, pview) • 10. Zeichne die Objekte aus v • 11. PaintersAlogrithm(T -, pview) 12. else(* pviewεhv*) • 13. PaintersAlogrithm(T +, pview) • 14. PaintersAlogrithm(T -, pview)

  28. Binary Space Partitioning - BSP • Motivation • Painters Algorithmus • BSP Trees • BSP Trees 2D • BSP Trees 3D

  29. Binary Space Partitioning - BSPBSP Trees 2D Sei S nun eine Menge sich nicht kreuzender Liniensegmente. Unsere Objekte sind alle trianguliert

  30. Binary Space Partitioning - BSPBSP Trees 2D Algorithmus2dBsp(S) • Input. Eine Menge S mit Segmenten {s1,…,sn} • Output. Ein BSP Tree für die Menge S • 1. If|S| ≤ 1 • 2.then erzeuge einen Baum T aus lediglich einem Blatt, in dem • die Segmente aus S explizit gespeichert sind. • 3. returnT • 4. else (* Benutze l(s1) als Trennlinie *) • 5. S+ { s l(s1) + : s ε S} ; T+2dBsp(S+) • 6. S- { s l(s1) - : s ε S} ; T-2dBsp(S-) 7. Erzeuge einen BSP Baum T mit Wurzel v, linkem Unterbaum T-, rechtem Unterbaum T+ und mit S(v) = { s ε S : s l(s1)}. 8. return T

  31. Binary Space Partitioning - BSPBSP Trees 2D s3 s2 5 Fragmente s1 s1 s3 3 Fragmente s2

  32. Binary Space Partitioning - BSPBSP Trees 2D Algorithmus2dRandomBsp(S) • Erzeuge aus der Menge S eine zufällige Permutation S‘ = s1,…, sn • 2. T 2dBsp(S‘) • 3. returnT

  33. Binary Space Partitioning - BSPBSP Trees 2D Abschätzung der Fragmente Sei si das nächste Segment welches vom Algorithmus als neue Trennlinie benutzt wird.

  34. Binary Space Partitioning - BSPBSP Trees 2D s3 s2 5 Fragmente s1 s1 s3 3 Fragmente s2

  35. Binary Space Partitioning - BSPBSP Trees 2D Abschätzung der Fragmente Sei si das nächste Segment welches vom Algorithmus als neue Trennlinie benutzt wird. Es gibt Segmente, die andere Segmente vor dem Zerschneiden „schützen“ können. Wir definieren eine Distanzfunktion wie folgt: Anzahl der schützenden Segmente zwischen si und sj Falls l(si) sj schneiden kann sonst

  36. Binary Space Partitioning - BSPBSP Trees 2D dist = 2 dist = 0 si dist = 1 dist = 0 dist = dist = 1

  37. Binary Space Partitioning - BSPBSP Trees 2D Abschätzung der Fragmente Die Wahrscheinlichkeit, dass ein Segment si ein Segment sj schneidet, hängt also von seinem Distanzwert ab. p ( l(si) schneidet sj ) Hieraus ergibt sich ein Erwartungswert von: E ( Anzahl der Schnitte durch si )

  38. Binary Space Partitioning - BSPBSP Trees 2D Abschätzung der Fragmente Für alle Segmente n folgt (bei linearer Betrachtung), dass 2 nlnn Schnitte erzeugt wurden. Daraus ergibt sich, dass die erwartete Anzahl an Fragmenten n + 2 n lnn ist.

  39. Binary Space Partitioning - BSPBSP Trees 2D Laufzeitanalyse Die Laufzeit hängt direkt von der Anzahl der Fragmente ab.

  40. Binary Space Partitioning - BSPBSP Trees 2D Laufzeitanalyse Zeile 1-4 maximal n mal, da durch S begrenzt. Algorithmus2dBsp(S) Zeile 5 oder 6 wird für jedes Fragment einmal Aufgerufen • Input. Eine Menge S mit Segmenten {s1,…,sn} • Output. Ein BSP Tree für die Menge S • 1. If|S| ≤ 1 • 2.then erzeuge einen Baum T aus lediglich einem Blatt, in dem • die Segmente aus S explizit gespeichert sind. • 3. returnT • 4. else (* Benutze l(s1) als Trennlinie *) • 5. S+ { s l(s1) + : s ε S} ; T+2dBsp(S+) • 6. S- { s l(s1) - : s ε S} ; T-2dBsp(S-) 7. Erzeuge einen BSP Baum T mit Wurzel v, linkem Unterbaum T-, rechtem Unterbaum T+ und mit S(v) = { s ε S : s l(s1)}. 8. return T

  41. Binary Space Partitioning - BSPBSP Trees 2D Laufzeitanalyse 2dBsp(S) läuft in O(n² log n)

  42. Binary Space Partitioning - BSP • Motivation • Painters Algorithmus • BSP Trees • BSP Trees 2D • BSP Trees 3D

  43. Binary Space Partitioning - BSPBSP Trees 3D

  44. Binary Space Partitioning - BSPBSP Trees 3D Algorithmus3dBsp(S) • Input. Eine Menge S ={t1,…,tn} mit Dreicken aus • Output. Ein BSP Tree für die Menge S • 1. If|S| ≤ 1 • 2.then erzeuge einen Baum T aus lediglich einem Blatt, in dem • S explizit gespeichert ist. • 3. returnT • 4. else (* Benutze h(t1) als Trennebene *) • 5. S+ { t h(t1) + : t ε S} ; T+3dBsp(S+) • 6. S- { t h(t1) - : t ε S} ; T-3dBsp(S-) 7. Erzeuge einen BSP Baum T mit Wurzel v, linkem Unterbaum T-, rechtem Unterbaum T+ und mit S(v) = { t ε S : t h(t1)}. 8. return T

  45. Quellenverzeichnis • „ComputationalGeometry – AlgorithmsandApplications“ von Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars Springer Verlag, Berlin, 3. Auflage (Mai 2008), Kapitel 12 (S.251-260) • Bild: Microsoft Flight Simulators X http://www.gursch.eu/resources/msfsx_textbild_1136468426.jpg • Bild: Sims 3 http://z.about.com/d/compsimgames/1/7/9/7/2/sims3pcscrnvday01.jpg • Bild: Quake 2 http://www.bluesnews.com/screenshots/q2/quake2-15.jpg

More Related