21
Institut für Informatik Arbeitsgruppe Computergraphik Universität Koblenz-Landau Prof. Dr. Heinrich Giesen Seminar “Computergraphik” Wintersemester 2000-2001 Seminararbeit Binary Space Patitioning Trees 21. Februar 2001 Christoph Göth Auf der Pütz 19 56130 Bad Ems [email protected]

Binary Space Patitioning Trees - uni-koblenz.decg/veranst/ws0001/sem/Goeth.pdf · konvex ist kann man dadurch prüfen, daß man bei einer weiteren Unterteilung, mit einer be- liebigen

Embed Size (px)

Citation preview

Institut für InformatikArbeitsgruppeComputergraphik

UniversitätKoblenz-LandauProf. Dr. HeinrichGiesen

Seminar “Computer graphik”Wintersemester2000-2001

Seminararbeit

Binary SpacePatitioning Trees21. Februar 2001

ChristophGöthAuf derPütz1956130BadEms

[email protected]

Inhaltsverzeichnis

1 Prinzip der BSPTrees 21.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 BSPTreesim 2D-Raum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 BSPTreesim 3D-Raum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Algorithmus und Implementierung 72.1 LeafyBSPTrees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 AndereArtenvon BSPTrees . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2.1 NodeBSPTrees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.2 Solid BSPTrees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3 Aufwandsabschätzung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Anwendungvon BSPTrees 123.1 Zeichnenvon 3D Szenenmit Hilfe von BSPTrees. . . . . . . . . . . . . . . . . 123.2 BSPundRaytracing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 PolygonKollisionenin 3D Spielen . . . . . . . . . . . . . . . . . . . . . . . . 14

4 Anhang 164.1 RekursiveZerteilungeines2D Raumes. . . . . . . . . . . . . . . . . . . . . . . 164.2 SolidBSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1

Kapitel 1

Prinzip der BSPTrees

1.1 Einleitung

Binary SpacePatitioningTrees(BSPtrees)sind,wie der Nameschonsagt,binäreBäume,diedazuverwendetwerden,Räumesozuunterteilen,daßbeimZeichnennurdie interessantenodersichtbarenObjekteberechnetwerden.BSPwurdemit denerstenEgo-Shootern,wieetwaDOOModerQuakevon id-Soft populär.

DasGrundprinzipder BSPBäumeist esRäumeaufzuteilen,um darauseinehierarchischeStrukturzu generieren.Man nimmt zum Beispielein Schlafzimmer, im Vordergrundein Bettmit einemStuhldavor undanderhinterenWandein Schranksteht.Man teilt denRaumin zweiTeileundordnetihn mit Hilfe derBSPTrees.DadurcherhältmaneinenBaum,derin denbeidenBlätterndenRaumin FrontundHeckunterteilt.Daslinke Blatt kannmannunnochin dasBettunddenStuhlunterteilen.SoerhältmanfolgendenBaum:

Schlaf-zimmer

Schrank

Bett Stuhl

Theoretischist es möglich, den Raumauchdirekt in mehr als zwei Teile zu unterteilen,aberdies würde späterzu Performenzverlustenführen. Der Vorteil von binärenBäumen,inihnengut ordnen,umsortierenund suchenzu können,überwiegt hier. Im folgendenwird dieVorgehensweisederBSPTreesnähererläutert.

2

KAPITEL 1. PRINZIPDERBSPTREES Seite3

1.2 BSPTreesim 2D-Raum

Zuerstsoll auf dasVerhaltenvon 2D BSPTreesnähereingegangenwerden,da diesesehran-schaulicharbeiten.Wie schonin derEinleitungerwähnt,teilt manRäumehierarchischauf. Beieinem2D Raumist dieserRaumim einfachstenFall durchvier Wändedefiniert. Man legt eineGeradedurchdieMitte desRaumesundunterteiltdenRaumsoin zweiTeile. Die Teilunggenauin derMitte ist keineVorraussetzung,sonderndientnuralsersteNäherung.

DadurcherhältmaneineUnterteilungin dieFront-undHeckseite.DurchweiteresAufteilenderneuentstandenenRäume,erhältmaneinefeinereHierarchierung.DiesmachtandieserStelleallerdingskeinenSinn,daessichum einenkonvexenRaumhandelt,in demkeineMauereineandereverdeckt. Aus diesemGrundsoll nun der folgendeRaumnäherbetrachtetwerden. IndemRaumbefindetsicheinePerson,die ein Blickwinkel von 90

�besitzt.DasBlickfeld (Field

of View) ist ebenfalls eingezeichnet.

1 2

3 54

DurchdiesesField of View kannmandie Mauernin Segmente1 aufteilen,die mit denNum-mern1 bis 5 gekennzeichnetsind. Der Betrachterkannnur Segment1 und4 sehen.Zusätzlichgibt eseinenTeil desRaumes,welchenernicht sehenkann2. WenndieserRaumnunvon einemGraphikEnginegezeichnetwird, sollenalle Segmente,beginnendvon einsbis fünf, in derrich-tigenReihenfolgegezeichnetwerden,um sodenRaumfür denBetrachterkorrektdarzustellen.DerGraphikEngineweißabernicht,in welcherReihenfolgeerdieSegmentezeichnensoll. DieskönntedurcheineSchnittpunktberechnungderField of View mit denMauernermitteltwerden,wasaberviel zu langedauernwürde. Mit Hilfe von BSPTreessoll diesdemGraphikEnginemitgeteiltwerden.

1Hier sollennurdienördlichenWändebetrachtetwerden2DieserTeil ist graugefärbt.

KAPITEL 1. PRINZIPDERBSPTREES Seite4

Die Ideeist, mit Hilfe BSPTreesdenRaumin zwei konvexeTeile zu unterteilen,um sodiekorrekteZeichenreihenfolgezu erhalten.Man nimmtdie gegebenenMauernalsHilfsmittel, umdie richtigeAufteilungzufinden.

1

3

4

56

7

8

A

A

12678

345

Front Heck2

In diesemBeispielverwendetmandie beidenkleinenWändezwei und sechsund legt dieTrennliniedurchdiesehindurch.Die zwei Teile bildendanndie BlättereinesbinärenBaumes.Der dadurchentstehendeBSPTreesorgt nunfür die richtigeDarstellung.BefindetmansichimFrontteil,mußzuerstderHeckteilgezeichnetwerdenundumgekehrt.Der Enginekannnunim-merdenfür denBetrachterkorrektenRaumdarstellen,ohneSchnittpunkteberechnenzumüssen.Am folgendenBeispielwird dieArbeitsweisebeimAufteilenderRäumegenauergezeigt.

1

234

5

6

7

8

9

1011

12

Die WändedesRaumssind gegeben. Zusätzlichhat man eindeutigeBezeichnerfür dieWändeunddie jeweiligeNormalederWand,die in dasRauminnerezeigt.Mannimmt nuneinebeliebigeWand3 undlegt eineTrennliniehindurch.DasVerfahrenarbeitetmit einerbeliebigenWand,aberzurOptimierungkannmanversucheneineWandzuwählen,diedenRaummöglichstin zwei gleich großeTeile zerteilt. DadurcherhältmaneinenausbalanciertenBSPTree. DiebeidenneuenRäumewerdenmit ihren Wändendannin denBSP Tree einsortiert. Wie manam folgendenBild sieht, könnendurchdasAufteilen neueWandsegmenteentstehen,die denentsprechendenBlätterndesBaumeszugeteiltwerden.

3In diesemBeispielWand3

KAPITEL 1. PRINZIPDERBSPTREES Seite5

1

234

5

6a

7

8

9

1011

12b

6b

12a

A

A

36a789101112a

1245

6b12b

Front Heck

Die beidenRaumteilesind aberbeidenochnicht konvex undmüssenweiterunterteiltwer-den.Rekursive werdennundie entstehendenRaumteilesolangeweiterzerlegt, bis alle konvexsind. Dabeigehtnur derzu bearbeitendeTeil desRaumesin die Berechnungein. Ob ein Raumkonvex ist kann mandadurchprüfen,daßmanbei einerweiterenUnterteilung,mit einerbe-liebigenWandals Trennlinie,wiederdenselbenRaumals Ergebnisfür die Frontseiteerhält.Die folgendeAbbildungzeigt denfertig zerlegtenRaummit seinemBSPTree. Die einzelnenRekursionsschrittesindim Anhang4.1abgebildet.

1

234

5

6a

7

8

9

1011

12b

6b

12a

A

A

12

12b

Front Heck

B

6a78

3910

BC

C

1112a

D45

6b

D

1.3 BSPTreesim 3D-Raum

Die ErweiterungdesBSPTreesPrinzipauf dendrei-dimensionalenRaumist sehreinfach. DieLinie, die zur Aufteilung derRäumeverwendetwurde,wird jetzt zu einerEbene.Desweiterenist der Raumnun in Polygonengegeben. Man legt die Trenn-Ebenenun durchein Polygon,daseineWand,denBodenoderdie Decke repräsentiert.Dasrekursive Verfahrenarbeitetjetztgenauso,wie bei den2 D Trees:

KAPITEL 1. PRINZIPDERBSPTREES Seite6

1. Polygonauswählen

2. EbenedurchdasPolygonlegen

3. Die PolygonederjeweiligenSeitenin denBSPTreeeinsortieren

4. Testenob einederbeidenSeitenkonvex ist

(a) Falls ja, aufhören

(b) Falls “nein”, mit diesemneuenRaumbei Schritt1 fortfahren

Kapitel 2

Algorithmus und Implementierung

In Kapitel 1 wurde dasArbeitsprinzipder BSPTreesnähererläutert. In diesemKapitel sollnunauf die eigentlicheImplementierung1 unddie Algorithmender3D BSPTreeseingegangenwerden.

2.1 Leafy BSPTrees

DereigentlicheBSPTreekannbeiLeafyBSPTreesin zweiwesentlicheTeileunterteiltwerden:

1. Die Wurzelmit deninnerenKnoten,die diehierarchicheAufteilung realisieren

2. Die Blätter, diedie konvexenRäumein Form vonPolygonenbeinhalten

Nur in denBlätterndesBSPTreeswerdenPolygonegespeichert.Der Baumwird mit Hilfe vonKnoten,die auseinemC-Structbestehen,realisiert:

struct BSP_node{int nodeID; // Eindeutiger IdentifyerPlane3d partition; // Die Ebene mit der geteilt wurdeBSP_node *frontnode; // Zeiger auf Front der EbeneBSP_node *backnode; // Zeiger auf die Rückseite der Ebenebool leaf; // true, wenn es sich um ein Blatt handeltint numpolys; // Anzahl der Polygone in diesem Knoten.

Diese ist 0, wenn es sich nicht um ein Blatt handeltPolygon3d *nodepolylist // Zeiger auf die Liste

mit den Polygonen des Knoten}

Bei der Initiallisierung desBSPTreeshat mannur einenKnoten,die Wurzel. Die nodeIDwird auf1, leaf auf trueundnumpolys aufdieAnzahlallerPloygonegesetzt.Die ZeigeraufdiePolygoneselberwerdenin nodepolylist gespeichert.Alles anderewird mit NULL initiallisiert.

1Die Implementierungwird in einemPseudoC-Codedargestellt

7

KAPITEL 2. ALGORITHMUS UND IMPLEMENTIERUNG Seite8

NachderInitiallisierungkannmanmit demAufbaudesBSPTreesbeginnen.Dazuwird diefolgendeMethodeverwendet:

BuildBSP (BSP_node *node){partplane = SelectPartitio nFro mLi st (n ode ->nodepolylist,

node->nodenumpo ly s) ;if(partplane = -1){

node->leaf = true;return;

}

// Zähle wie viele Polygone vor oder auf der Partitions-ebene liegen. Allokiere den Speicher für diese und bildeden Frontknoten auf node->frontnode . Dasselbe mache fürden Heckknoten unter node->backnode

// Teile die Polygone in "Front" und "Rückseite"in Abhängigkeit von partplane ein

//Falls die Polygone eindeutig davor oder dahinter liegen,lege diese in die entsprechenden Knoten

//Falls ein Polygon die Ebene schneidet, unterteile dasPolygon und lege jedes Stück in den entsprechenden Knoten

//Falls ein Polygon in der Ebene liegt, vergleiche die Normaledes Polygon mit der der Ebene. Wenn die Normalen gleich sind,lege das Polygon in den Frontknoten

BuildBSP(node-> fr ontno de);BuildBSP(node-> back node) ;

}

Zuerstwird eineEbeneausdenbestehendenPolygonengeneriert.Mit Hilfe dieserEbenewerdendie Polygonein zwei Teile aufgeteiltunddannalszwei neueBereicherekursiveweiter-bearbeitet.Die FunktionSelectPartitionFromListist für die GenerierungderEbeneverantwort-lich. Diesearbeitetwie folgt:

Man nimmt dasersteElementausder Liste der Polygoneund benutztdiesesals Teilungs-ebene.Dannwerdendie Polygoneauf derFrontseiteundauf derRückseitegezählt.Man merktsich die beidenZahlenund die NummerdesPolygons. Danachwird daszweitePolygonalsTeilungsebenegewählt. ManzähltwiederundvergleichtdasErgebnismit dembisherigen.Fallsdiesein ausgeglicheneresVerhältnisliefert, übernimmtmandie neuenWerteunddie NummerdeszweitenPolygons.Dieseswird mit allen Polygonenin der Liste wiederholt. Zum Schlußgibt manentwederdie NummerdesPolygonsmit dembestenVerhältnisoder-1 zurück.Die -1

KAPITEL 2. ALGORITHMUS UND IMPLEMENTIERUNG Seite9

signalisiert,daßessichum einenkonvexenRaumhandelt.Diesstellt manfest,wennmanim-meralsVerhältnis0 zu nodenumpolys-1 bekommt,alsokeineTrennebenefindet,die denRaumweiterunterteilenwürde.

Wie stellt man aber fest, auf welcherSeiteeiner Ebenesich ein Polygonbefindet? DereinfachsteWeg ist es,sich jedenPunktdesPolygonsanzuschauen.Wennalle Punkteauf derRückseiteder Ebenesind, so ist auchdasPolygonausdiesenPunktenauf der RückseitederEbene.Um dieseszu berechnenbildet mandasScalarproduktausderNormalenderEbeneunddemPunkt.Ist dasErgebniskleinerals0, soliegt derPunktaufderRückseitederEbene.

Wennnun abereinigePunkteauf der Front- und einigeauf der Rückseiteder Ebenesind,somußdasPolygonzerteiltwerden.Zum Aufteilen desPolygonsbeginnt manmit demerstenPunktundschaut,ob dieserauf derFrontseitederTrennebeneliegt. Wennja, ist diesdererstePunktdesneuenPolygons. Nun itteriert mandurchdie Punkteentlangder Kanten,und fügtdieseso langedemneuenPolygonzu, bis manauf einenPunkttrif ft, derauf derRückseitederEbeneist. DieserPunktwird nundererstePunktdeszweitenneuenPolygons.Nun itteriertmanweiterund fügt die PunktedemzweitenPolygonzu, bis manwiederauf einenPunkttrif ft, derauf der Frontseiteliegt, und führt diesenjetzt wiederdemerstenPolygonzu. NachdemmandurchallePunkteitteriert ist, hatmanzweiListenmit Polygonpunkten.ManmussnunnochdieSchnittpunkteberechnen,umzwei vollständigeneuePolygonezuerhalten.

N

L0

L1

P

Mit denfolgendenbeidenFormelnlässtsichderSchnittpunktberechnen:

1.��� �������� ���������� ����� ���� wobeiPein PunktaufderEbeneundN dieNormalederEbeneist

2. ��� ������� �"!#� �%$ � �'&�(*)'+,+-&/.�01&�(32546��2

2.2 AndereArten von BSPTrees

Die ImplementierungderBSPTreesvon Kapitel 2.1 wurdennachdemMusterder Leafy BSPTreesvorgestellt.Im folgendensoll nunauf alternativeArten eingegangenwerden.

KAPITEL 2. ALGORITHMUS UND IMPLEMENTIERUNG Seite10

2.2.1 NodeBSPTrees

NodeBSPTreesarbeitensehrähnlich,wie die Leafy BSPTrees. Allerdings wird hier keineUnterscheidungzwischeninnerenKnotenundBlätternvorgenommen.Beim Aufteilen in FrontundHeckwird dasPolygon,daßdie Trennebenegebildethat,nicht weiternachuntengereicht,sondernin diesemKnotengespeichert.Wennalle Rekursionenbeendetsind, befindetsich injedemKnoteneinPolygon.DerNachteildiesesVerfahrenist es,daßsehrgroßeBäumeentstehenkönnen,die unterUmständennichtbenötigtwerden.

2.2.2 Solid BSPTrees

SolidBSPTrees,oderauchSolidNodeBSPTreesgenannt,sindeineErweiterungderNodeBSPTrees,die besondersgut für denEinsatzin first-person-shooterSpielen,wie etwa Quake oderUnreal,geeignetsind. In diesenSpielenwerdenalleinstehendeMauernwie folgt dargestellt:

C

A

B DSolid Area

Mauern von oben

Dasheißtesgibt niemalseineWand, die von der Rückseitezu sehenist, welchenur auseinemPolygonbesteht. Zu diesemZweck werdenan Knoten, die kein weiterenFront- oderHeck-Kinderknotenhaben,ein weitererKnoten,ohnePolygon,angehängt.In denKnotengibteszwei boolscheVariablen,IsLeaf undIsSolid. Bei diesenzusätzlichenKnotenwird IsLeafauftruegesetztum zusignalisieren,daßdort kein Polygonmehrgespeichertist.

AB

CD

E FG

AFront Heck

B

Solid = false

C

D

Solid = false

Empty

Em

pty

Solid = false Solid = true

Solid Area

Em

pty

E

Empty

Solid = false

G

F

Solid = false

Solid = false Solid = true

Falls dieserKnotenals die Front desElternknotenangehängtwurde,wird IsSolid automa-tischauf falsegesetzt,wassignalisiert,daßmansich in einemleeren,aberbetretbarenBereichbefindet.Falls derKnotendie Rückseitebildet setztmanIsSolidauf trueundweißso,daßdieseinnichtbetretbarer, massiverBereichist. Auf dieseWeisegelangtmanzufolgendenBSPTrees.

KAPITEL 2. ALGORITHMUS UND IMPLEMENTIERUNG Seite11

Die einzelnenRekursionsschrittesindin Angang4.2wiedergegeben.EineweitereBesonderheitderSolidBSPTreesist dieBehandlungvonPolygonen,diebeiei-

nerAufteilunggenauaufderTrennebeneliegen.DiesewerdenimmerdirektandenFrontknotenweitergereicht,umsospäterleerenodermassivenRaumkorrektzu identifizieren.

2.3 Aufwandsabschätzung

DerAufwandfür dieErzeugungvonBSPTreesläßtsichsehrschwerabschätzenundhängtsehrstarkvon der gegebenSzeneab. Durchdie FestlegungderTrennebenenkönnenzumTeil sehrviele neuePolygoneentstehen.DieseneuenPolygonegehendannin die weitereBerechnungmit ein. Im Idealfall hat mandenAufwand 7 + � 498 $": + � 2�2 für � Polygone. Auf jederEbenedesBaumesmüssenalle � Polygonedurchsuchtwerden,umdieseentsprechendderTrennebeneaufzuteilen.Der vollständigeBaumhataberslebstnur ein Höhevon

8 $": + � 2 .Beim vorgestelltenAlgorithmuszur GenerierungdesLeafy BSPTreeswurdedasFeld zu-

sätzlichnocheinmaldurchsucht,um sodasidealePolygonzumAufteilen zu finden.Wennmandiesesunterlässtkannder Baumentartenund hat im schlechtestenFall somit einemAufwandvon 7 + ��; 2 . Durch, daßneuePolygonegeneriertwerden,kannder Aufwandim schlechtestenFall sogarnochdarüberhinausgehen.

Kapitel 3

Anwendungvon BSPTrees

In Kapitel 2 wurdedie Generierungvon BSPTreeserläutert. In diesemKapitel wird nun aufeinigeAnwendungender BSPTreeseingegangen.BSPTreeswerdenin der ComputergraphikansehrvielenStelleneingesetzt.Zum Beispielkannmanmit BSPTreesbeimRadiosityForm-faktorenberechnen(siehe[Jaco]).Da diesaberdenRahmendieserArbeit sprengenwürde,sollhier nur aufdieHauptanwendungeneingegangenwerden.

3.1 Zeichnenvon 3D Szenenmit Hilfe von BSPTrees

3 D Szenensind im Normalfall durcheineMengevon Polygonengegeben,die sich ungeord-net im Raumder Szeneaufhalten. Mit BSPTreeslässtsich die Szeneso sortieren,daßmandurcheinfachesTraversierendesBaumesdie korrekteZeichenreihenfolgeerhält.NachdemderBSPTreefür eineSzeneberechnetwurde,mußnur nochdie PositiondesBetrachterseingefügtwerden,ummit demTraversierenzubeginnen.

Mit folgendemCodewird ein Leafy BSPTreetraversiertunddie Polygonein der richtigenReihenfolge,vonhintennachvorne,gezeichnet.

int RenderBSP (BSP_node* node){int side;Vektor3d Position;

// Position des BetrachtersPosition.x = xpos;Position.y = ypos;Position.z = zpos;

if (!node->leaf) {side = ClassifyPoint(& node-> par ti ti on, &Position);if(side==CP_BAC K) {

RenderBSP(node- >f ron tn ode) ;RenderBSP(node- >back node);

12

KAPITEL 3. ANWENDUNG VON BSPTREES Seite13

}else{RenderBSP(node- >back node);RenderBSP(node- >f ron tn ode) ;

}

}else{// Zeichne die Polygone in der nodepolylist

}return 1;

}

Die FunktionClassifyPointberechnetdasSkalarproduktvonderNormalederEbeneundderBetrachterpositionund gibt einenper typdef definiertenWert zurück,wennder Betrachtervoroderhinter der Ebenesteht. Wennder Betrachtervor der Ebenesteht,mußzuerstdie Rück-seiteder Ebenegezeichnetwerden. Dazu traversiertmannun zuerstdie Rückseiteund danndie Vorderseite.Wennbeim TraversierendesBaumesein Blatt erreichtwird, werdendie dortgespeichertenPolygonegezeichnet.

Mit Hilfe einesvorberechnetenBSPTreeslassensichSzenenfür einenBetrachtersehrein-fach zeichnen,ohnedaßviele weitereBerechnungenbenötigtwerden. Auch wird für diesesZeichnenkeinZ-Buffer benötigt.

3.2 BSPund Raytracing

DasProblembeim Raytracing,oderbessergesagt,dasam meistenZeit kostende,ist die Seh-strahlverfolgung. Es mußfür jedenSehstrahlberechnetwerden,ob er ein Polygonschneidet.Bei � Polygonenhabenwir danneinenAufwand von 7 + � 2 . DanachstehtdasPolygonfest,welcherdiesenStrahlzuersttrif ft. Der Strahlkannaberwiederreflektiertwerdenunddie Be-rechnungmussvon vornebegonnenwerden.Wennmannicht bei einerbestimmtenAnzahlvonReflektionenabbricht,hat maneinenAufwandvon 7 + �=< 2 . Um Raytracingzu beschleunigen,versuchtmandie AnzahlderSchnittpunktberechnungenzuverringern.

Mit folgenderSchnittpunktberechnung,auf Leafy BSP basierend,kann der Aufwand auf7 +?>A@CB � 2 reduziertwerden,wennmaneinenoptimalenBSPTreevorliegenhat. Die FunktionbekommtalsStartparameterdie WurzeldesBaumes(Node),denStartpunkt(P),denRichtungs-vektordesStrahls(D) unddie LängedesStrahls(len).

“intersection results” Intersection (Node, P, D, len){if Node == Null then return (“no intersection”);

if Node == Leaf then {// schneide (P,D) mit den Polygonen in der Liste;return("the closest resulting intersection") ;

}

KAPITEL 3. ANWENDUNG VON BSPTREES Seite14

dist = Distanz des Strahl zur Ebene;near = Die Seite der Ebene, die P enthält;if 0 < dist < len then {

hit_data = Intersection (near,P, D, dist);if hit_data != “no intersection” {

return(hit_data );}Q = P + dist * D;far = Rückseite der Ebene, die P nicht enthält;return(Intersec ti on( fa r, Q, D, len - dist);

} else {return(Intersec ti on( near , P, D, len);

}}

Zuerst,wennderKnotenkeinBlatt ist, wird festgestellt,aufwelcherSeitederEbene,diedasSplitterpolygonbildet,mansichbefindetunddieDistanzzudieser. Die Seite,repräsentiertducheinenKinderknoten,wird mit near benannt.Ist dieseDistanzkleineralsdie Länge,sokanneinSchnittpunktim Unterraumnear liegen. Falls die Distanzgrösserist, mußdieserSchnittpunktsogardort liegen,wennerexistiert.

Im Fall dist < 0 überprüftman,ob auf der kurzenStrecke, zwischenP und der EbeneeinSchnittpunktvorliegt. Falls nicht, ist dieserBereichnicht mehrrelevantundmankannzur an-derenSeitederEbene(far) übergehen.Man führt nundie Berechnungmit demneuenPunktQ,deraufderEbeneliegt, undeinervermindertenLängefort.

FallsmanaufeinBlatt stößt,müssenallemöglicheSchnittpunktemit denhiergespeichertenPolygonenberechnetwerden.Der Schnittpunktmit dergeringstenDistanzzu P wird zurückge-geben.

3.3 PolygonKollisionen in 3D Spielen

DiesesProblemist sehrähnlichdesProblemsbeim Raytracing.Man hat eineKamera,reprä-sentiertdurcheinePerson,die sichdurcheine3D Landschaftbewegt. Die Kamerabewegt sichdabeiimmer nocheinemPunkt D . zu einemPunkt D ; . Bei diesenelementarenSchrittenmußjedesmalüberprüftwerden,ob die Kameramit einemPolygonder Szenezusammenstößt.HatmanseineSzenein ungeordnetenPolygonengegeben,mußmanfür jedenSchritt überprüfen,ob sichderStrahlvon D . nach D ; mit irgendeinemPolygonschneidet.DiesbedeutetwiedereinAufwandvon 7 +-EF2

für jedenSchritt.Wennmanbedenkt,daßeinSzeneeinesComputerspielesmeistüber10.000Polygonebesitzt,ist diesein enormerRechenaufwand.

Durch den Einsatzvon BSP Treesläßt sich dieserAufwand stark verringern. Wie beimRaytracinghat maneinenPunkt und einenStrahl gegeben. Mit dessenHilfe traversiertmannundurcheinenSolid BSPTree.Stößtmandabeiauf einenSchnittpunktundläuft damit in einObjekt,so kannder Schritt nicht ausgeführtwerden.Dadurchergibt sichwiederein Aufwandvon 7 +->G@CB � 2 .

KAPITEL 3. ANWENDUNG VON BSPTREES Seite15

Da essichbei 3D Spielenum Echtzeitanwendungenhandelt,kannessein,daßselbstdiesesVerfahrenzulangedauert.MannimmtdanneinfachdenZielpunkt D ; undschautnach,wo dieserim SolidBSPTreerepräsentiertwird. Fürdiesesbrauchtmannurmit Hilfe desSkalarproduktesdurchdenTreezu traversierenundlandetschließlichin einemderZusatzknotenderSolid BSPTrees. Damit erhält man die AussageIsSold = true oder IsSolid = false. Falls man letztereAussageerhält,darfderSchrittnichtausgeführtwerden.

Wennmandavon ausgeht,daßdie einzelnenSchrittesehrklein sind undbei einemFehler,diesernur sehrkurz zu sehenist, so ist dieseBerechnungfür denBetrachterdurchauskorrekt.ManhatdurchdenEinsatzvonBSPTreesdieSchnittpunktberechnungvon10.000Polygoneauf10 bis15Skalarproduktberechnungenreduziert.

Kapitel 4

Anhang

4.1 RekursiveZerteilung eines2D Raumes

1

234

5

6

7

8

9

1011

12

1

234

5

6a

7

8

9

1011

12b

6b

12a

A

A

36a789101112a

1245

6b12b

Front Heck

16

KAPITEL 4. ANHANG Seite17

1

234

5

6a

7

8

9

1011

12b

6b

12a

A

A

1245

6b12b

Front Heck

B

6a78

39101112a

B

1

234

5

6a

7

8

9

1011

12b

6b

12a

A

A

1245

6b12b

Front Heck

B

6a78

3910

BC

C

1112a

1

234

5

6a

7

8

9

1011

12b

6b

12a

A

A

12

12b

Front Heck

B

6a78

3910

BC

C

1112a

D45

6b

D

KAPITEL 4. ANHANG Seite18

4.2 Solid BSP

AB

CD

E FG

A

BCD

Front Heck

EFG

AB

CD

E FG

A

CD

Front Heck

EFG

B

Solid = false

Em

pty

AB

CD

E FG

AFront Heck

EFG

B

Solid = false

C

D

Solid = false

Empty

Em

pty

AB

CD

E FG

AFront Heck

EFG

B

Solid = false

C

D

Solid = false

Empty

Em

pty

Solid = false Solid = true

Solid Area

Em

pty

KAPITEL 4. ANHANG Seite19

AB

CD

E FG

AFront Heck

FG

B

Solid = false

C

D

Solid = false

Empty

Em

pty

Solid = false Solid = true

Solid Area

Em

pty

E

Empty

Solid = false

AB

CD

E FG

AFront Heck

B

Solid = false

C

D

Solid = false

Empty

Em

pty

Solid = false Solid = true

Solid Area

Em

ptyE

Empty

Solid = false

G

F

Solid = false

Solid = false Solid = true

Literatur verzeichnis

[Abra96] M. Abrash(1996):“Zen of GraphicsProgramming”,TheCoriolisGroup,Scottsda-le, USA

[Arvo96] J.Arvo (1986):“Linear-TimeVoxelWalkingfor Octrees”(Aufsatzim WWW, URL:http://reality.sgi.com/bspfaq/ltvw.shtml, Zugegriffenam18.02.01)

[Bsp00] “Binary SpacePartitioning TreesFAQ” (FAQ im WWW, URL: http://www.uni-giessen.de/faq/archiv/graphics.bsptree-faq/msg00000.html, Zugegriffen am06.12.00)

[Bsp01] “Binary Space Partitioning Trees FAQ” (FAQ im WWW, URL:http://reality.sgi.com/cgi-bin/bspfaq/,Zugegriffenam18.02.01)

[Fili] G. Filimonov (????):“Binary SpacePartitioningTrees”(Aufsatzim WWW, URL:http://www.3dtechdev.com/3dbsp/3dbsptrees.html, Zugegriffenam03.12.00)

[Hamm] T. Hammersley (????):“BSP Trees”(Aufsatzim WWW, URL: http://tfpsly.planet-d.net/TomHammersley/bsp.htm,Zugegriffenam27.01.01)

[Jaco] P. Jacob,H. Hagen(????):“BSP BasedAlgorithm for Analytical Form FactorCal-culation” (Aufsatzim WWW, URL: http://cg-g.newmail.ru/2/72.html,Zugegriffenam30.01.01)

[Simm] G. Simmons (????): “Creating a Solid Node Based BSP Tree Compiler &Renderer” (Aufsatz im WWW, URL: http://www.tasteofhoney.freeserve.co.bk/vsd/bsp/bsppart1.html,Zugegriffenam28.01.01überdasGoogleArchiv)

20