Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
1
Videreutvikling av open source biblioteket Coin3D
Einar Godø Ole Kristian Heggøy Veiledere: Harald Soleim Hans Birger Drange Atle Geitung
2
Kontor i Trondheim, Oslo og Stavanger Utdannet ved NTNU
3D visualisering av data Eget utviklet bibliotek (Coin3D) Ferdige skeddersydde applikasjoner Olje & gass Airbus, Audi, Boeing, GE Hydro, IKEA, Lockheed Martin, NASA, Norsk Hydro, Shell, Statoil, Toyota, and US Army
3
Motivasjon Videreutvikle biblioteket Coin3D
Forenkle visualisering i applikasjoner for ingeniørarbeid og presentasjon av vitenskapelig data. Utvidelsen vil hete SIMAruba
4
Coin3D Bibliotek på toppen av OpenGL
Implementert etter samme API som TGS/Mercury sin implementasjon Open Inventor. Kan brukes på tvers av plattform SoWin (Windows) SoQt, SoXt(Linux/UNIX) Sc21 (Mac OS X) Tilleggsfunksjonalitet: VRML97 3D lyd 3D tekstur …
5
Oppbygging Coin3D
6
Scenegraf Coin bruker scenegraf datastrukturer for å gjengi/rendre 3D grafikk i sanntid. En rettet asyklisk graf Hver node representerer et objekt (f.eks form, materiale, transformasjon) Objektorientert struktur, arrangerer scenen logisk og plasserer noder i rommet.
7
Node Fundamentale element i scenegrafen
Automatisk lagt inn som rotnode Tre basiskategorier: Formnode (linje, flate) Egenskapnode (farge, materiale) Gruppenode
8
Scenegraf
9
Scenegraf(2) Scenegrafens noder lagres som objekter i scenedatabasen og ikke tabeller av piksler. Kan da utføre operasjoner på objektene Tegne scenegrafen Skrive scenegrafen til fil Søke etter noder Instanser kan deles (hjul) Forhjul Bakhjul Sparer ressurser
10
Nodekits Forhåndsdefinert gruppe av noder som ofte brukes i lag.
Eksempel: Polygon / flate Koordinater Normal Farge Form Behandles som en enhet (node) Øker abstraksjonsnivået, forenkler utvikling Oppretter noder etter behov Alle våre klasser er implementert som nodekits
11
Open Inventor Fil Kan organisere en scenegraf vha en fil.
Utvikle og se en scene uten direkte programmering. #Inventor V2.1 ascii Seperator{ Material { diffuseColor } Cone { } }
12
Resultat
13
Programering myMaterial = SoMaterial() myMaterial.diffuseColor(1.0, 0.0, 0.0) # Rød myCone = SoCone() # Lage en scene som inneholder en rød kjegle scene = SoSeparator() scene.addChild(myMaterial) scene.addChild(myCone)
14
Oppgaven Implementere gitte funksjoner fra Open Inventor-komponenten kjent som ”DataViz". Elementene vil inngå i SIMs produktkatalog som et eget programvare-bibliotek, SIMAruba.
15
DataViz/SIMAruba Generelle abstraksjoner i 3D.
Kurver, Vektorer, Diagrammer osv.
16
Verktøy Språk: C++ Microsoft Visual Studio .NET Distribuert utvikling
CVS Cygwin Linuxlignende miljø i Windows Installasjon Kommunikasjon (CVS)
17
Einar Min del av oppgaven.
18
Arbeidet Del 1: API allerede spesifisert
Sette meg inn i teknologien og oppbygning av eksisterende løsninger. Installere bibliotek, få opp utviklingsmiljø Del 2: Implementere valgte funksjoner
19
Implementasjon Utgangspunkt skjermbilder generert vha. iv-filer.
Tidlig kjørbar versjon for sammenligning En viss indre design, samle all felles kode (refaktorering) Legges i private klasser
20
Implementasjon(2) Sirkelklassene : 2D sirkel (PoCircle)
PoCircleCenterRadius PoCircleThreePoints 3D sirkel (PoCircle3) PoCircle3CenterRadius PoCircle3ThreePoints
21
PoCircleCenterRadius
Felter: SoSFVec2f center SoSFFloat radius Løsning: Finne sirkelpunkt ved cos og sin.
22
PoCircle3CenterRadius
Felter: SoSFVec3f center SoSFFloat radius SoSFVec3f normal Løsning: Translere til xy-plan Tegne Translere tilbake
23
PoCircleThreePoints Felter: SoSFVec2f p SoSFVec2f q SoSFVec2f r
Løsning: Algoritme for å finne center (x, y)
24
PoCircle3ThreePoints Felter: SoSFVec3f p SoSFVec3f q SoSFVec3f r
Løsning: Translere Samme som forrige Translere tilbake
25
Sirkelbueklassene 2D sirkelbue (PoCircleArc)
PoCircleArcCtrPtAngle PoCircleArcCtrRadTwoAngle PoCircleArcCtrTwoPts PoCircleArcThreePts 3D sirkelbue (PoCircleArc3) PoCircleArc3CtrPtAngle PoCircleArc3CtrTwoPts PoCircleArc3ThreePts
26
PoCircleArc/PoCircleArc3
Abstrakte klasser Felt: SoSFEnum arcType CENTER_CLOSE OPENED END_CLOSE
27
Sirkelbue Mye felles, derfor viktig med refaktorering.
PoCircleArc(3)CtrPtAngle: Felt: center, startPoint, angle, (normal) PoCircleArcCtrRadTwoAngle: Felt: center, startPoint, endPoint PoCircleArc(3)CtrTwoPts: PoCircleArc(3)ThreePts: Felt: startPoint, middlePoint, endPoint
28
Kakediagram Kakediagram (PoPieChart): 2D kakediagram (PoPieChart2D)
29
PoPieChart Felter: enum IntAnnotPosition { RADIAL_INT_POS, HOR_INT_POS
} enum ExtAnnotPosition { RADIAL_EXT_POS, HOR_EXT_POS, HOR_ALIGNED_EXT_POS, VERT_ALIGNED_EXT_POS, SQUARE_ALIGNED_EXT_POS enum Alignment { LEFT_ALIGN, CENTER_ALIGN, RIGHT_ALIGN, INWARDS_ALIGN, OUTWARDS_ALIGN enum PercentStatus { ABSOLUTE, PERCENTAGE SoSFFloat radius SoMFString sliceText SoMFFloat sliceValue SoMFColor sliceColor SoSFBool arrowVisibility SoSFFloat arrowHeight SoSFFloat arrowWidth SoSFBool sliceGroupActive SoSFFloat sliceGroupMinValue SoSFEnum sliceGroupFlagMin SoSFString sliceGroupString SoMFShort sliceToTranslateNumber SoMFFloat sliceToTranslateValue SoSFFloat sliceAngleStep SoSFEnum intAnnotPosition SoSFEnum intAnnotAlignment SoSFBool intAnnotTextVisibility SoSFBool intAnnotValueVisibility SoSFBool intAnnotPercentVisibility SoSFBool intAnnotAddStringVisibility SoSFString intAnnotAddString SoSFString intAnnotTextFontName SoSFFloat intAnnotTextFontSize SoSFString intAnnotValueFontName SoSFFloat intAnnotValueFontSize SoSFString intAnnotPercentFontName SoSFFloat intAnnotPercentFontSize SoSFFloat intAnnotDistance SoSFEnum extAnnotPosition SoSFEnum extAnnotAlignment SoSFBool extAnnotTextVisibility SoSFBool extAnnotValueVisibility SoSFBool extAnnotPercentVisibility SoSFBool extAnnotAddStringVisibility SoSFString extAnnotAddString SoSFString extAnnotTextFontName SoSFFloat extAnnotTextFontSize SoSFString extAnnotValueFontName SoSFFloat extAnnotValueFontSize SoSFString extAnnotPercentFontName SoSFFloat extAnnotPercentFontSize SoSFFloat extAnnotDistance1 SoSFFloat extAnnotDistance2 SoSFFloat extAnnotDistance3
30
PoPieChart2D Felt: SoSFVec2f center
31
PoPieChart3D Felter: SoSFVec3f center SoSFFloat zCenter2
32
Eksisterende Kanten på stykkene oppdelt i synlige rektangel
Hvert polygon har samme normal for hele flaten.
33
Forbedret Løsning: Legge til normal i alle fire hjørnepunktene
på rektanglene.
34
Oppsumering Småproblemer i starten pga. feil ved installasjon
Litt for lang tid til å sette meg inn i teknologien Mye å ta igjen mot slutten
35
Takk for meg Ordet over til Ole Kristian
36
Motivasjon for bruk av utviklingsmetoder
Tidlig kjørbare komponenter Tidlig testing og evaluering. Vurdere visuelt resultat opp mot skjermbilder. Enkel kode, unngå duplisering. Mange nesten like funksjoner Forenkler vedlikehold og eventuelt feilretting.
37
Brukte utviklingsmetoder
Elementer fra UP Iterasjoner, kjørbart resultat som kan testes og evalueres opp mot skjermbilder. Disipliner: Design Implementering Testing Elementer fra XP Kontinuerlig refaktorering Enkel struktur etter behov
38
Design Ferdig spesifisert API Internt design av implementeringen
Bridge Pattern
39
Bridge pattern (1) Hvorfor:
Klasser som inkluderer en h-fil i C++ kan se hele klassekroppen til den inkluderte klassen, også deler som er private. Hele den inkluderte klassen blir derfor kompilert i lag med klassen som inkluderer. Dette medfører tre problem. Klasser som kun blir brukt under private delen må kompileres når klientkode kompileres. Dersom kode merket privat blir endret må også klientkode kompileres. Dersom koden blir brukt i et bibliotek må alltid klientkoden kompileres på nytt ved endringer i biblioteket.
40
Bridge pattern (2) Fordeler :
Skjuler inkluderte filer brukt til implementering Kan endre bibliotek uten at bruker må linke på nytt med bibliotek. Implementering legger interne implementeringen i egen klasse i cpp-fil. I hovedklassen sin h-fil er det kun en peker til hjelpeklassen som er synlig.
41
Problem med Bridge Pattern
Ekstra kostnader ved bruk Økt minne og tids bruk Ikke brukt ved de enkleste klassene. Problem å dele felles kode
42
Implementering
43
PoArrow, PoArrow3 Utgave i to og tre dimensjoner
Trekke ut felles funskjonalitet
44
PoRectangle, PoParallelogram, PoParallelogram3
Trekke ut felles kode. Ikke brukt CC, statiske metoder i egen klasse.
45
PoCurve, PoCurve3 (1) Funksjonalitet Ulik representasjon av kurve
Markører Tekst og linjer Treng beregnede punkter i mellom kontrollpunktene Fyll
46
PoCurve, PoCurve3 (2)
47
PoCurve, PoCurve3 (6) Implementering av jevn kurve Krav Alternativer
Interpolere kontrollpunkter Kunne hente ut beregnede punkter mellom to kontrollpunkt Både i to og tre dimensjoner C1- / C2-kontinuitet? Alternativer Bezier, Catmull Rom Interpolerer start- og slutt-punkt. Sette i sammen kurver av fire punkt der start og sluttpunktet ingår i kurven. Må beregne to hjelpepunkt
48
PoCurve, PoCurve3 (7)
49
PoCurve, PoCurve3 (8) Naturlig kubisk spline
C2- kontinuitet Interpolerer alle, ingen hjelpepunkt Kurvefunksjonalitet til Coin3D Problem med å få ut beregnede mellompunkter
50
PoCurve, PoCurve3 (9) Valg Naturlig kubisk spline
Best visuelt resultat Litt tyngre å beregne Samme tidskompleksitet Cache
51
PoErrorCurve Kurve med øvre og nedre feilmargin Ulik representasjon
Ulike valg for beregning av feilmargin
52
PoAxis (1) Funksjoner for å opprette aksesystem
PoAxis abstrakt baseklasse for ulike akseklasser
53
PoAxis (2) Ulike variabler for størrelser, synlighet osv, til aksene
Variablene kan bestemmes av bruker. Problemer Bestemme synligehet. Bestemme verdier til størrelse. Overlapping av tekst Bestemme plasseringen til de ulike elementene.
55
PoAxis (3) Bounding box Minste omsluttende volum til et element
Brukt til å sjekke overlapp og beregne størrelser
56
Testing og evaluering Sjekke scenegrafen til nodekit
Sammenligne skjermbilder. Minnelekasje. Erstatte uferdige klasser med testvariabler.
57
Takk for meg.
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.