Videreutvikling av open source biblioteket Coin3D

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Bli kjent med i Powerpoint
Avhengigheter og installering
Larvik Og Omegn MS Foreningen sin PC opplæring høsten 2005
Bygg web på Opplæring Presentasjon Idium AS Bygg web på Opplæring.
SuperOffice - Visma Global ERP link - Tilbud/Ordre SuperOffice - Visma Global integrasjonen består av 3 produkter. ERP link SuperOffice - Visma Global.
GoOnline publisering Hvordan komme i gang med GoOnline. Denne presentasjonen tar deg steg for steg gjennom oppsett av nettsted med bruk av GoOnline Proffesional.
Endringer Generelt for TQM Enterprise
Realisering av Software Patterns Software Design Patterns Realisering med kode Refaktorering Gjenkjenning av mønstre.
Brukerveiledning til NHOs PowerPoint-mal
Programmering i ActionScript - hva er det, og hvordan undervise?
Variasjoner i subklasser.  Prinsippskissen er meget enkel  En abstrakt klasse har en konkret metode og en abstrakt metode  Hver subklasse realiserer.
Programmering av dynamiske websider i C# - hva er det, og hvordan undervise? Tom Heine Nätt.
IS-102 Klassedefinisjoner
Databasehåndtering med MySQL
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Eksempel AOA (Activity On Arc)
23. januar 2004TDT4285 Planl&drift IT-syst1 Tjeneroppgraderinger TDT4285 Planlegging og drift av IT-systemer Anders Christensen, IDI.
Operativsystemer.  Tilstandsmaskiner kalles på engelsk Finite State Machines.  Tilstandsmaskiner er en metode til å beskrive systemer med logisk og.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Utført av: Jeppe Flensted HiST Vår 2009
LocMoc : Avatar 3D – Visualisering av menneskelige bevegelser ved bruk av Java og Coin3D. En presentasjon av: Øivind Hoff Johansen og Jon Kåre Sørensen.
Læring og tenkning Systemutvikling er læring Gjensidig respekt og samarbeid Følge en konkret oppskrift Velge blant flere oppskrifter Nå målet uten oppskrift,
Geometriske figurer… Beregnet på småskoletrinnet, 1. eller 2. klasse
Strukturerende elementer i UML
Combining Compound Conceptual User Interface Components with Modelling Patterns - a Promising Direction for Model-based Cross-platform User Interface Development.
  © Steria FitNesse som nyttig verktøy Smidig FitNesse som nyttig verktøy Anders Vindvad.
Gruppe 3 – Presentasjon 2 Henning Kristiansen, Mats Lindh, André Hauge og Vegard Simensen.
Testing av system Gruppe 6 Henrik Bækhus Morten A. Iversen Mathias Bondeson Gunnar K. Kulleseid Svein Ivar Kristiansen Ronny Hulthin.
Singleton & Adapter Pattern Gruppe 3. Singleton Pattern Sørger for at en klasse kun kan ha en instans Vanligvis implementert med globale variabler –Singleton.
Flash og ActionScript - Nye muligheter Jostein Nordengen.
Programmering i ActionScript - hva er det, og hvordan undervise?
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
En enkel introduksjon Geir H. Hansen & Martin Setek SUAF-SO USIT jQuery.
Publisering på verdensveven Kursdag 2 VÅFF, våren 2002.
Om prosjektet LCFG (Local ConFiGuration system) –Utviklet av Paul Anderson –System for administrasjon av store nettverk av Unix- / Linux-maskiner Datagrunnlag.
Hovedfagspresentasjon
Grunnleggende tekstbehandling
INF 4130 Eksamen 2008 Gjennomgang.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
© UNIVERSITETETS SENTER FOR INFORMASJONSTEKNOLOGI UNIVERSITETET I OSLO USIT Side 1 Installering av Windows XP med PXE (netboot) Del 1 – forhåndskonfigurering.
Kontinuerlig kvalitetskontroll. Hvordan komme helt i mål.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
1 INF5110 – 23. april, 2013 Noen oppgaver til kap. 8 Dette er en bedre utgave av oppgavene, lagt ut 24. april Nå fredag (26/4): Det blir ikke undervisning.
Parallellisering av Coin3D for Systems in Motion av Sveinung Thunes.
Objektorientert utforming In 140 Sommerville kap. 12.
Hovedprosjekt 2005/2006 Oppgave 28E Øyvind Mosti, 3DSU Administrasjon av apparatutlån, pasienter, rekvirenter og helseforetak.
Freenet A Distributed Anonymous Information Storage and Retrieval System.
Utvikling av tegneverktøy for Generalized Sketches Student: Ørjan Hatland Veiledere: Yngve Lamo, Høgskolen i Bergen Uwe Wolter, Universitetet i Bergen.
Android-Programmering Våren Oversikt Ytelse vs responsivitet Strategier for og opprettholde responsiviteten Tråder Asynchronous Task.
Database for medisinsk programvare Øyvind W. Kvalsund.
Funksjoner og GeoGebra Velkommen !
Forstudie Nå situasjonen: dagens situasjon med ulemper og fordeler
Konstruksjon og Testing Torsdag 30. september 2004 Av Even Aasland Harald Ueland.
UiO Programkiosk: Ny portal og tilgang fra Mac og Linux
Operativsystem IKT for lærere 15. november Hvorfor lære om dette? Kanskje den mest brukte programvaren i løpet av en (arbeids)dag Forskjellige operativsystem.
Objektorientert design In 140 Sommerville kap 12 – del 1.
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Se hvordan jeg smart bruker Outlook 2010
Registrering av testresultater fra mobiltelefon
Datakortet – Modul 3 Word 2003, Kap Modul 3.
Kom i gang med Python Pål Hellesnes SYSTEMUTVIKLER
Strukturerende elementer i UML
Oktober 2014 Hilde T Lauvset Rafaelsen
Grafen til kvadratiske funksjoner
PROTO.IO INTERAKTIV PROTOTYPING.
Dybdelæring – regneark B – Samarbeid
Dybdelæring – regneark B – Samarbeid
Utskrift av presentasjonen:

Videreutvikling av open source biblioteket Coin3D Einar Godø Ole Kristian Heggøy Veiledere: Harald Soleim Hans Birger Drange Atle Geitung

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

Motivasjon Videreutvikle biblioteket Coin3D Forenkle visualisering i applikasjoner for ingeniørarbeid og presentasjon av vitenskapelig data. Utvidelsen vil hete SIMAruba

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 …

Oppbygging Coin3D

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.

Node Fundamentale element i scenegrafen Automatisk lagt inn som rotnode Tre basiskategorier: Formnode (linje, flate) Egenskapnode (farge, materiale) Gruppenode

Scenegraf

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

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

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 1 0 0 } Cone { } }

Resultat

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)

Oppgaven Implementere gitte funksjoner fra Open Inventor-komponenten kjent som ”DataViz". Elementene vil inngå i SIMs produktkatalog som et eget programvare-bibliotek, SIMAruba.

DataViz/SIMAruba Generelle abstraksjoner i 3D. Kurver, Vektorer, Diagrammer osv.

Verktøy Språk: C++ Microsoft Visual Studio .NET Distribuert utvikling CVS Cygwin Linuxlignende miljø i Windows Installasjon Kommunikasjon (CVS)

Einar Min del av oppgaven.

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

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

Implementasjon(2) Sirkelklassene : 2D sirkel (PoCircle) PoCircleCenterRadius PoCircleThreePoints 3D sirkel (PoCircle3) PoCircle3CenterRadius PoCircle3ThreePoints

PoCircleCenterRadius Felter: SoSFVec2f center SoSFFloat radius Løsning: Finne sirkelpunkt ved cos og sin.

PoCircle3CenterRadius Felter: SoSFVec3f center SoSFFloat radius SoSFVec3f normal Løsning: Translere til xy-plan Tegne Translere tilbake

PoCircleThreePoints Felter: SoSFVec2f p SoSFVec2f q SoSFVec2f r Løsning: Algoritme for å finne center (x, y)

PoCircle3ThreePoints Felter: SoSFVec3f p SoSFVec3f q SoSFVec3f r Løsning: Translere Samme som forrige Translere tilbake

Sirkelbueklassene 2D sirkelbue (PoCircleArc) PoCircleArcCtrPtAngle PoCircleArcCtrRadTwoAngle PoCircleArcCtrTwoPts PoCircleArcThreePts 3D sirkelbue (PoCircleArc3) PoCircleArc3CtrPtAngle PoCircleArc3CtrTwoPts PoCircleArc3ThreePts

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

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

Kakediagram Kakediagram (PoPieChart): 2D kakediagram (PoPieChart2D)

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

PoPieChart2D Felt: SoSFVec2f center

PoPieChart3D Felter: SoSFVec3f center SoSFFloat zCenter2

Eksisterende Kanten på stykkene oppdelt i synlige rektangel Hvert polygon har samme normal for hele flaten.

Forbedret Løsning: Legge til normal i alle fire hjørnepunktene på rektanglene.

Oppsumering Småproblemer i starten pga. feil ved installasjon Litt for lang tid til å sette meg inn i teknologien Mye å ta igjen mot slutten

Takk for meg Ordet over til Ole Kristian

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.

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

Design Ferdig spesifisert API Internt design av implementeringen Bridge Pattern

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.

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.

Problem med Bridge Pattern Ekstra kostnader ved bruk Økt minne og tids bruk Ikke brukt ved de enkleste klassene. Problem å dele felles kode

Implementering

PoArrow, PoArrow3 Utgave i to og tre dimensjoner Trekke ut felles funskjonalitet

PoRectangle, PoParallelogram, PoParallelogram3 Trekke ut felles kode. Ikke brukt CC, statiske metoder i egen klasse.

PoCurve, PoCurve3 (1) Funksjonalitet Ulik representasjon av kurve Markører Tekst og linjer Treng beregnede punkter i mellom kontrollpunktene Fyll

PoCurve, PoCurve3 (2)

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

PoCurve, PoCurve3 (7)

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

PoCurve, PoCurve3 (9) Valg Naturlig kubisk spline Best visuelt resultat Litt tyngre å beregne Samme tidskompleksitet Cache

PoErrorCurve Kurve med øvre og nedre feilmargin Ulik representasjon Ulike valg for beregning av feilmargin

PoAxis (1) Funksjoner for å opprette aksesystem PoAxis abstrakt baseklasse for ulike akseklasser

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.

PoAxis (3) Bounding box Minste omsluttende volum til et element Brukt til å sjekke overlapp og beregne størrelser

Testing og evaluering Sjekke scenegrafen til nodekit Sammenligne skjermbilder. Minnelekasje. Erstatte uferdige klasser med testvariabler.

Takk for meg.