Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Videreutvikling av open source biblioteket Coin3D

Liknende presentasjoner


Presentasjon om: "Videreutvikling av open source biblioteket Coin3D"— Utskrift av presentasjonen:

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.

54

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.


Laste ned ppt "Videreutvikling av open source biblioteket Coin3D"

Liknende presentasjoner


Annonser fra Google