• No results found

visualisering_3D_fargerom.pdf - NTNU Open

N/A
N/A
Protected

Academic year: 2023

Share "visualisering_3D_fargerom.pdf - NTNU Open"

Copied!
104
0
0

Laster.... (Se fulltekst nå)

Fulltekst

Høsten 2001 startet Anders Rindal, Arne Magnus Bakke og Ståle Kopperud prosessen som skulle munne ut i et hovedprosjekt våren etter. Etter grundig konsultasjon kom vi frem til at dette kun var en av oppgavene som tiltalte oss.

Oppgavedefinisjon / problem / avgrensning

Prosjektorganisering

Han vil ha ansvar for å innkalle til møter, fungere som kontaktperson for gruppen i forhold til oppdragsgiver/veileder og holde gruppen oppdatert og motivert. Dersom dette ikke er mulig, må den enkelte gi beskjed om dette i relativt god tid, slik at det blir mulig for gruppen å løse oppgaven sammen.

Målgruppe, rapport og oppgave / produkt

Alle deltakere er bevisst det ansvaret hver enkelt har både for seg selv og for resten av gruppen i løpet av prosjektet. Problemstillingen i denne oppgaven vil være mer knyttet til et forskningsprosjekt i motsetning til mange andre typer prosjekter.

Formål / hvorfor dette emnet

Egen bakgrunn og kompetanse. Hva må læres

Det er også med på å definere målgruppen som vil ha mest nytte av produktet og dets funksjonalitet. Dette vil være vesentlig for prosjektets suksess, og er også med på å påvirke valget av utviklingsmodellen vi skal følge.

Utviklingsmodell

Kollektivt eierskap til kode: Koden som skrives må kunne redigeres av alle personer i utviklingsteamet. I samarbeid med oppdragsgiver og veileder utarbeider vi brukerhistorier og utvikler deretter tidsanslag som danner utgangspunkt for en utgivelsesplan.

Arbeidsformer

Parprogrammering: All programmering bør gjøres i par, den ene skriver koden, mens den andre gjør strategiske vurderinger for neste del av koden som skal lages og verifiserer koden som skrives. For å sikre at alle holder seg motiverte og oppdatert på prosjektets fremgang, prøver vi vårt beste for å møte Extreme Programmings krav til delt eierskap av kode.

Organisering av rapporten

Vi har forsøkt å utnytte disse forslagene, da de er et resultat av andres erfaring med hva som er lønnsomt i andre utviklingsprosjekter av tilsvarende karakter. Månedlige statusmøter inkluderer detaljerte beskrivelser av hva som ble fullført og hva som ville være viktig i fremtiden.

Rapportlayout

Senteret skal kunne velges av brukeren eller beregnes av programmet ut fra plasseringen av punktene. Segmentets maksimale punkter skal kunne flyttes og alle punkter i segmentet skal skaleres i forhold til radius.

Java3D vs OpenGL - Utdypning av analysefasen

Et gruppemedlem foreslo å utforske muligheten for å bruke OpenGL i tillegg til Java. JNI ville komplisere modulariseringen av produktet, og det var ingen ekstreme ytelsesforskjeller mellom de to løsningene.

Kildekode / kommentering

Versjonshåndtering

Web

Katalogstrukturen og sikkerhetskopifilene er navngitt med en dato for å unngå misforståelser om hvilken som er den nyeste versjonen. Lenker til andre programvarepakker som vi bruker og som er nødvendige for å kjøre applikasjonen.

Plattformuavhengighet

Vi har valgt en person i gruppen til å ha ansvar for å oppdatere og utforme nettsiden for å unngå konflikter på denne måten. På denne måten klarer vi å håndtere flere ulike bilder og 3D-visninger samtidig, og brukeren får større fleksibilitet i arbeidet sitt.

Layout, style, fonter

  • Generelt
  • Vinduene
  • Ikoner
  • Fonter

For å endre innstillinger på en 3D-modell (n), må du først aktivere dette vinduet slik at kontrollpanelet vet hvilket vindu (n) som skal jobbes med. Hvis du lukker 3D-modellen og den er borte (ikke fra samme eller andre økter), lukkes også kontrollpanelet automatisk.

Figur 3.1: ICC3D og alle dets vinduer.
Figur 3.1: ICC3D og alle dets vinduer.

Fargerom

Struktur

Aksesystem

Det er imidlertid viktig at den kun lagrer bildet og ikke har informasjon om bevegelsene som gjøres i 3D (det endelige resultatet av pikselverdiene, men ikke posisjonen som for øyeblikket finnes på 3D-lerretet). Funksjonen henter originalbildet og fjerner all informasjon om hva som ble gjort før.

Dynamisk klasseloading og modularitet

Generelt

Her snakker vi om filnavn, filtype, størrelse på bildet, men også om fargerom og fargedybde. Dette er mer eller mindre en sammenstilling av informasjon som kommer inn når bildet lastes og vil ikke endres under kjøringen av programmet.

Virkemåte

Det er her du lagrer bildet når du er ferdig med å redigere eller vil fortsette senere. Det samme gjelder hvis du ønsker å fjerne en funksjonalitet; fjern klassen fra riktig katalog og programmet vil ikke gi den gitte funksjonaliteten neste gang det startes. Hvis nye klasser legges til mens programmet kjører, vil de ikke være tilgjengelige før applikasjonen lukkes og startes på nytt.

Figur 3.4: Dynamisk lasting av plugins
Figur 3.4: Dynamisk lasting av plugins

Struktur

Interaksjoner

Globale transformasjoner

De oppfører seg på samme måte som om et punkt ble flyttet med konstant høydebegrensning på, dvs. med konstant L. Derfor beveger de seg med en felles vektor, som beregnes ut fra forskyvningen i forhold til L-aksen. Tilten er nyttig hvis det hvite punktet in image ikke er på rett plass i forhold til svart, vil det være viktig å vippe alle objektene slik at du kan endre dette.

Visualiseringer

Den deler punktene på midten av L-aksen (L=50), slik at de over midten går mot maks L og de under mot min L. Forskjellen er generelt at her finner man ikke en felles vektor , men hold separate vektorer A og B. Resultatet er at hvis brukeren flytter det valgte objektet bort fra L-aksen i +A-retningen, vil alle objekter strekke seg bort fra L-aksen i +A- eller -A-retningen avhengig av hvilken side av LB-planet de er på. i.

Visualiseringer og interaksjoner - en studie i samhandling

Målet er at interaksjonene ikke skal ta hensyn til hvilken visualisering som er i bruk, så lenge scenestrukturen støtter de operasjonene som er nødvendige for å flytte objektene på ønsket måte. Dette betyr at en interaksjon basert på for eksempel interpolering av tetraederinndelingen ikke er avhengig av en spesifikk visualisering, men krever kun at visualiseringen i bruk har skapt objekter med ønsket tetraederinndeling. Visualiseringen som bygger strukturen avgjør hvordan operasjonen skal utføres, for eksempel om endring av posisjonen til et objekt skal føre til at koordinatene til flere trekanter flyttes, eller om det er midten av en kule som skal flyttes.

Begrensninger

Utstyrsgamut

  • Java
  • Java3D
  • JAI - Java Advanced Imaging
  • JMF - Java Media Framework

Dette ble løst med utgivelsen av JavaVM (Java Virtual Machine) eller kjøretidsmiljø for nesten alle plattformer som er tilgjengelige i dag. Alle Java-programmer kjører på denne VM og trenger derfor ikke å rekompileres fra plattform til plattform. 2Merk: Dette er basert på vår erfaring og testing, og vi har ikke funnet noen dokumentasjon fra verken BlackDown eller andre på at dette er et generelt problem.

Figur 4.1: Eksempel på et BranchGroup subtre.
Figur 4.1: Eksempel på et BranchGroup subtre.

Plattformer

  • Microsoft Windows
  • Linux
  • Apple Macintosh
  • Foretrukket system

Dette er absolutt noe ingen ønsker å oppleve og det kan virke som at problemet har blitt mindre med Java2 1.4.0, XFree 4.2.0 og bruk av direkte gjengivelse i X. Andre problemer er at noen av de såkalte Windows Ledere på Linux (det betyr WindowMaker, KDE, Sawfish, Enlightenment, Afterstep, etc.) har en tendens til å få informasjon om vinduer på forskjellige måter. Vi har riktignok ikke testet ICC3D på andre Unix-varianter (vi har ikke hatt tilgang til slike maskiner), og det er grunn til å tro at programmet vil kjøre tilfredsstillende på SUNs eget Solaris-system.

Fargerom

  • Generelt
  • Utvidelse
  • Konvertering av fargeverdier
  • Formler / kode for konvertering
    • sRGB sRGB
    • sRGB CIEXYZ
    • CIEXYZ sRGB
    • Lab sRGB
    • Lab CIEXYZ
    • CIEXYZ Lab
    • CIEXYZ sRGB
    • XYZ CIEXYZ
    • CIEXYZ XYZ

Konverteringen til og fra de forskjellige fargerommene implementeres av funksjonene public abstract float[] toCIEXYZ(float color[]);. Disse funksjonene vil deretter konvertere til og fra CIEXYZ med funksjonene toCIEXYZ(..) og fromCIEXYZ(..) for henholdsvis srgb og lab. Konverteringen fra sRGB til sRGB vil være for å sikre at RGB-verdiene ligger i riktig intervall: 00 RGB 10.

Figur 4.4: Konvertering av fra sRGB til CIEXYZ fargerom.
Figur 4.4: Konvertering av fra sRGB til CIEXYZ fargerom.

Oppbygning av 3D struktur

Generelt

Når det gjelder oppdatering av selve bildet, har vi gjort vårt beste for å få det til å skje så raskt som mulig. Det er verdt å merke seg at kun pikslene som er endret oppdateres i bildet. Et Canvas 3D-objekt har fått direkte tilgang til informasjon i et enkelt image2D-objekt, og å oppdatere et image2D-objekt blir en fornuftig sak.

Struktur

Implementasjon

Parsere

Generelt

Filformater

  • IT8.7/2 - Parser.Java
  • Regulært - Parser2.Java
  • ICC profiler - IccReader.Java

Oppgaven til denne og de tilhørende filene er å trekke ut gamutdata fra ICC-profiler hvis dette er tilgjengelig i den aktuelle ICC-filen. Alle ICC-profiler vil ikke inneholde gamutdata, og det vil derfor ikke være mulig å trekke ut relevante data. Dette betyr at du vil spare mye behandlingstid ved først å slå opp i tag-tabellen før du leser data, da mange ICC-profiler vil være veldig store og kompliserte.

Figur 4.7: Kontrollpanel og valg tilknyttet gamut for IT7.8/2 formatet.
Figur 4.7: Kontrollpanel og valg tilknyttet gamut for IT7.8/2 formatet.

Eksportering av data

Tag-tabellen vil fungere som en innholdsfortegnelse for en gitt profil, og det er her du finner plasseringen av relevante data i profilen.

Forandring av posisjon og zoom i 3D

Visning av aksesystemer i 3D

Visualiseringer

  • Standard
  • Kvantisert
  • Segment maxima
    • Algoritmen
    • Unøyaktighet
    • Problemer
    • Interpolering
    • Implementasjon
  • Convex Hull (3D)
  • Alpha Shapes
    • Delaunaytriangulering i 3D (ved flipmetoden)
    • Delaunaytriangulering i 3D (via convex hull i 4D) . 67

Det er imidlertid noen tilfeller der store kuler dekker mindre kuler som er i nærheten, noe som ikke er heldig. Hvis punktene er plassert inne i alle hyperplanene, kan punktet forkastes da det ikke er en del av overflaten til det konvekse skroget. En punktliste indikerer at disse punktene er på utsiden av overflaten, og dermed vil ikke overflaten være en del av det konvekse skroget.

Figur 4.14: Kvantisert visualisering.
Figur 4.14: Kvantisert visualisering.

Generell posisjon

Interaksjoner

  • Interaksjoner generelt
  • Standard interaksjon
  • Segmentinteraksjon
  • Tetraederinterpolasjon

Vi inverterer så denne for å finne den motsatte transformasjonen, og bruker deretter denne matrisen til å beregne hvor 4 imaginære objekter befinner seg. Pikslene som endres vil endre seg for mye sammenlignet med pikslene som er i nærheten. Denne interpolasjonen krever å dele opp rommet i tetraeder, samt å beregne vektene som brukes for å finne ut hvor mye en endring i hjørnepunktet endrer punktene inne i tetraederet.

Globale transformasjoner

Når brukeren prøver å flytte et objekt, blir alle tetraedrene som har objektet som et toppunkt funnet. For å rotere om en vilkårlig akse, gjør man først en translasjon slik at spissen er i origo. Så gjør du det hele i motsatt rekkefølge, så du gjør om alle operasjonene med unntak av den ene rotasjonen.

Begrensninger

Capture

Rotasjonene og translasjonene som er lagt inn i den gjeldende oppgaven vil da bli utført som en operasjon på det angitte antallet bilder. Selve videokodingen overlates til en klasse som er i stand til å lage filmer fra alle typer bildedata. Koderen er i stand til å støtte komprimeringsalgoritmene installert på datamaskinen der den kjører, slik at den for eksempel kan lage videoer i DivX-format.

Generell optimalisering av kode

Selve køen er begrenset i størrelse for å unngå store minnekrav, og håndteringen er synkronisert slik at kun én tråd får tilgang til køen om gangen. Hvis koderen er ferdig med de gitte dataene og køen er tom, vil den vente på flere bilder eller eventuelt andre ting som vi har valgt, selv om gevinsten som sagt ikke er stor, bruk av logiske operasjoner der det er hensiktsmessig har bevist.

Installasjon

Windows

I menyen som da kommer opp kan brukeren velge å installere Java, Java3D, JMF, JAI, og hovedprogrammet. Derfor var det naturlig å forberede produktet for nettbasert distribusjon slik at det ble automatisert. Dette ble gjort ved hjelp av PackageForTheWeb, som lar brukeren pakke filer til en kjørbar fil.

Linux (x86)

Selve GUI-en er mer eller mindre lik den i Windows-versjonen, men likheten slutter der. Java-pakkene for Linux har som sagt ikke et spesielt brukervennlig installasjonsprogram, så det var her vi måtte endre litt. Ved å omdirigere utdataene som faktisk går til terminalvinduet til en tekstvisning, og gi to knapper valget om brukeren godtar Suns lisensavtale eller ikke, har vi klart å lage nærmest et grafisk installasjonsprogram for Java-pakkene å lage.

InstallAnywhere

For å ende opp med et stabilt produkt som oppfører seg som forventet, er det viktig at du utfører testing og kvalitetssikring gjennom hele utviklingsprosessen. Kravet om at du alltid fokuserer på et enkelt design, så lenge som mulig, reduserer muligheten for at deler av programmets kode kan bli tungvint etter hvert som applikasjonen utvides. I utviklingsfasen brukte vi mange andre tester som ble lagt til koden, som sørget for at vi fikk meldinger dersom det oppsto uventede situasjoner.

Backup

Maskin nummer to sto på Sørbyen Studenthjem, hvor koden kopieres over skolens eget nettverk (selv om IT-avdelingen nesten klarte å forhindre det også). Den siste maskinen som inneholdt koden var en utvikler som var på skolen hele tiden mens han jobbet. Når koden ble kopiert til andre maskiner varierte avhengig av hvor mye som ble gjort, men mellom utviklermaskinen og den bærbare datamaskinen ble koden kopiert flere ganger om dagen.

Kritikk av oppgaven

Videre arbeid, nye (hoved)prosjekter

Evaluering av gruppens arbeid

  • Innledning
  • Organisering
  • Fordeling av arbeidet
  • Prosjekt som arbeidsform
  • Subjektiv opplevelse av hovedprosjektet

Når det gjelder gruppen vår skal det sies at vi jobbet veldig godt sammen. Vi har hatt våre problemer, men dette var kun knyttet til selve oppgaven og hvordan et problem skulle/bør løses. Vi ble introdusert for nye arbeidsmetoder, men også for et felt som var helt ukjent for oss.

Utviklingsmodellen XP, eXtreme Programming

ICC3D og alle dets vinduer

Tittel i “2D Image” vinduet

Tittel i hovedvinduet til ICC3D

Dynamisk lasting av plugins

Eksempel på et BranchGroup subtre

Eksempel på et “virtuelt univers”

Kontrollpanel og valg tilknyttet fargerom

Konvertering av fra sRGB til CIEXYZ fargerom

Konvertering fra CIEXYZ til sRGB fargerom

Arvehierarki for visualiseringer

Kontrollpanel og valg tilknyttet gamut for IT7.8/2 formatet

Kontrollpanel og valg tilknyttet regulært filformat

Kontrollpanel og valg tilknyttet ICC profiler

Organiseringen i en ICC profil

Kontrollpanel og valg tilknyttet synsvinkel

Kontrollpanel og valg tilknyttet visualiseringer

Standard visualisering

Kvantisert visualisering

Segment maxima oppdeling

Segment maxima visualisering

Convex hull visualisering

Alpha shapes visualisering. Øverst: stor alphaverdi. Nederst: liten al-

Kontrollpanel og valg tilknyttet constraints/begrensninger

Arvehierarki for fargerom

Arvehierarki for klasser som lastes dynamisk

Funksjonsoppbygning av 3d struktur

Arvehierarki for transformasjoner

Arvehierarki for begrensninger

Figur

Figur 1.1: Utviklingsmodellen XP, eXtreme Programming.
Figur 3.1: ICC3D og alle dets vinduer.
Figur 3.4: Dynamisk lasting av plugins
Tabell 3.4: Arvehierarki for klasser som lastes dynamisk
+7

Referanser

RELATERTE DOKUMENTER

Også i dette området må vannet kunne drenere gjennom veifyllingen, slik at det ikke blir stående vann med kjemikalierester her..