Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Videreutvikling av open source biblioteket Coin3D Einar Godø Einar Godø Ole Kristian Heggøy Ole Kristian HeggøyVeiledere: - Harald Soleim - Hans Birger.

Liknende presentasjoner


Presentasjon om: "Videreutvikling av open source biblioteket Coin3D Einar Godø Einar Godø Ole Kristian Heggøy Ole Kristian HeggøyVeiledere: - Harald Soleim - Hans Birger."— Utskrift av presentasjonen:

1 Videreutvikling av open source biblioteket Coin3D Einar Godø Einar Godø Ole Kristian Heggøy Ole Kristian HeggøyVeiledere: - 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) Eget utviklet bibliotek (Coin3D) Ferdige skeddersydde applikasjoner 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) SoWin (Windows) SoQt, SoXt(Linux/UNIX) SoQt, SoXt(Linux/UNIX) Sc21 (Mac OS X) Sc21 (Mac OS X)Tilleggsfunksjonalitet: VRML97 VRML97 3D lyd 3D lyd 3D tekstur … 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) Formnode (linje, flate) Egenskapnode (farge, materiale) Egenskapnode (farge, materiale) Gruppenode 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 Tegne scenegrafen Skrive scenegrafen til fil Skrive scenegrafen til fil Søke etter noder Søke etter noder Instanser kan deles (hjul) Forhjul Forhjul Bakhjul Bakhjul Sparer ressurser

10 Nodekits Forhåndsdefinert gruppe av noder som ofte brukes i lag. Eksempel: Polygon / flate Koordinater Koordinater Normal Normal Farge Farge Form 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 #Inventor V2.1 asciiSeperator{ 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 CVSCygwin Linuxlignende miljø i Windows Linuxlignende miljø i Windows Installasjon Installasjon Kommunikasjon (CVS) 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)2D sirkel (PoCircle) PoCircleCenterRadius PoCircleCenterRadius PoCircleThreePoints PoCircleThreePoints 3D sirkel (PoCircle3)3D sirkel (PoCircle3) PoCircle3CenterRadius PoCircle3CenterRadius PoCircle3ThreePoints 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)2D sirkelbue (PoCircleArc) PoCircleArcCtrPtAngle PoCircleArcCtrPtAngle PoCircleArcCtrRadTwoAngle PoCircleArcCtrRadTwoAngle PoCircleArcCtrTwoPts PoCircleArcCtrTwoPts PoCircleArcThreePts PoCircleArcThreePts 3D sirkelbue (PoCircleArc3)3D sirkelbue (PoCircleArc3) PoCircleArc3CtrPtAngle PoCircleArc3CtrPtAngle PoCircleArc3CtrTwoPts PoCircleArc3CtrTwoPts PoCircleArc3ThreePts PoCircleArc3ThreePts

26 PoCircleArc/PoCircleArc3 Abstrakte klasser Felt: SoSFEnum arcType CENTER_CLOSE CENTER_CLOSE OPENED OPENED END_CLOSE END_CLOSE

27 Sirkelbue Mye felles, derfor viktig med refaktorering. PoCircleArc(3)CtrPtAngle: Felt: center, startPoint, angle, (normal) Felt: center, startPoint, angle, (normal)PoCircleArcCtrRadTwoAngle: Felt: center, startPoint, endPoint Felt: center, startPoint, endPointPoCircleArc(3)CtrTwoPts: PoCircleArc(3)ThreePts: Felt: startPoint, middlePoint, endPoint Felt: startPoint, middlePoint, endPoint

28 Kakediagram Kakediagram (PoPieChart): 2D kakediagram (PoPieChart2D)2D kakediagram (PoPieChart2D) 3D kakediagram (PoPieChart3D)3D kakediagram (PoPieChart3D)

29 PoPieChart Felter: enum IntAnnotPosition { RADIAL_INT_POS, RADIAL_INT_POS, HOR_INT_POS HOR_INT_POS} enum ExtAnnotPosition { RADIAL_EXT_POS, RADIAL_EXT_POS, HOR_EXT_POS, HOR_EXT_POS, HOR_ALIGNED_EXT_POS, HOR_ALIGNED_EXT_POS, VERT_ALIGNED_EXT_POS, VERT_ALIGNED_EXT_POS, SQUARE_ALIGNED_EXT_POS SQUARE_ALIGNED_EXT_POS} enum Alignment { LEFT_ALIGN, LEFT_ALIGN, CENTER_ALIGN, CENTER_ALIGN, RIGHT_ALIGN, RIGHT_ALIGN, INWARDS_ALIGN, INWARDS_ALIGN, OUTWARDS_ALIGN OUTWARDS_ALIGN} enum PercentStatus { ABSOLUTE, ABSOLUTE, PERCENTAGE 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. Tidlig testing og evaluering. Vurdere visuelt resultat opp mot skjermbilder. Vurdere visuelt resultat opp mot skjermbilder. Enkel kode, unngå duplisering. Mange nesten like funksjoner Mange nesten like funksjoner Forenkler vedlikehold og eventuelt feilretting. Forenkler vedlikehold og eventuelt feilretting.

37 Brukte utviklingsmetoder Elementer fra UP Iterasjoner, kjørbart resultat som kan testes og evalueres opp mot skjermbilder. Iterasjoner, kjørbart resultat som kan testes og evalueres opp mot skjermbilder. Disipliner: Disipliner:DesignImplementeringTesting Elementer fra XP Kontinuerlig refaktorering Kontinuerlig refaktorering Enkel struktur etter behov Enkel struktur etter behov

38 Design Ferdig spesifisert API Internt design av implementeringen Bridge Pattern 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. 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. Hele den inkluderte klassen blir derfor kompilert i lag med klassen som inkluderer. Dette medfører tre problem. 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 Skjuler inkluderte filer brukt til implementering Kan endre bibliotek uten at bruker må linke på nytt med bibliotek. Kan endre bibliotek uten at bruker må linke på nytt med bibliotek.Implementering legger interne implementeringen i egen klasse i cpp-fil. legger interne implementeringen i egen klasse i cpp-fil. I hovedklassen sin h-fil er det kun en peker til hjelpeklassen som er synlig. 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 Økt minne og tids bruk Ikke brukt ved de enkleste klassene. 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 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 Ulik representasjon av kurve Markører Markører Tekst og linjer Treng beregnede punkter i mellom kontrollpunktene Fyll Fyll

46 PoCurve, PoCurve3 (2)

47 PoCurve, PoCurve3 (6) Implementering av jevn kurve Krav Krav Interpolere kontrollpunkter Kunne hente ut beregnede punkter mellom to kontrollpunkt Både i to og tre dimensjoner C1- / C2-kontinuitet? Alternativer Alternativer Bezier, Catmull Rom Interpolerer start- og slutt-punkt. Interpolerer start- og slutt-punkt. Sette i sammen kurver av fire punkt der start og sluttpunktet ingår i kurven. Sette i sammen kurver av fire punkt der start og sluttpunktet ingår i kurven. Må beregne to hjelpepunkt Må beregne to hjelpepunkt

48 PoCurve, PoCurve3 (7)

49 PoCurve, PoCurve3 (8) Naturlig kubisk spline Naturlig kubisk spline C2- kontinuitet Interpolerer alle, ingen hjelpepunkt Kurvefunksjonalitet til Coin3D Kurvefunksjonalitet til Coin3D Problem med å få ut beregnede mellompunkter

50 PoCurve, PoCurve3 (9) Valg Naturlig kubisk spline Best visuelt resultat Best visuelt resultat Litt tyngre å beregne 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 synligehet. Bestemme verdier til størrelse. Bestemme verdier til størrelse. Overlapping av tekst Bestemme plasseringen til de ulike elementene. Bestemme plasseringen til de ulike elementene.

54

55 PoAxis (3) Bounding box Minste omsluttende volum til et element Minste omsluttende volum til et element Brukt til å sjekke 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 Einar Godø Einar Godø Ole Kristian Heggøy Ole Kristian HeggøyVeiledere: - Harald Soleim - Hans Birger."

Liknende presentasjoner


Annonser fra Google