ATT UPPTÄCKA DOLDA OBJEKT I SPEL

Storlek: px
Starta visningen från sidan:

Download "ATT UPPTÄCKA DOLDA OBJEKT I SPEL"

Transkript

1 Malskapada v Henrik ATT UPPTÄCKA DOLDA OBJEKT I SPEL En undersökning av occlusion culling och dess påverkan i spelscener TO DETECT HIDDEN OBJECTS IN GAMES An analysis of occlusion culling and its affect in game scenes Examensarbete inom Datalogi Grundnivå/ 30hp Vårtermin 2017 Jakob Eriksson Examinator: Henrik Engström

2 Sammanfattning Att detektera och eliminera dolda ytor är viktigt när grafiska applikationer blir mer komplexa och detaljerade. En teknik som används till det är occlusion culling och olika typer av algoritmer har tagits fram för att möjliggöra den tekniken. Occlusion culling innebär att hitta objekt som har stor potential att dölja delar av en scen. Dessa objekt kallas för occluders. I den här rapporten så undersöks möjligheten att använda olika stor mängd av occluders i en algoritm och hur det påverkar olika typer av spelscener. Tre olika spelscener har satts upp i Unity som skiljer sig i hur de är uppbyggda. Effekten av occlusion culling i scenerna visar på att det kan vara en teknik bättre lämpad för vissa typer av spel. Rapporten visar också på en möjlighet att forska vidare på valet av en lämplig mängd med occluders. Nyckelord: Occlusion culling, occluders, spelscen, Unity

3 Innehållsförteckning 1 Introduktion Bakgrund Culling-tekniker Occluders Rumsindelningsstrukturer Exempel på occlusion culling i praktiken Problemformulering Tidigare projekt 1: Occlusion culling för modeller med stora occluders Tidigare projekt 2: Hierarkisk culling med occlusion trees Tidigare projekt 3: Accelerated occlusion culling using shadow frusta Syfte och delmål Delmål 1: scener och occlusion culling-algoritm Delmål 2: utvärdering Metodbeskrivning Metod för delmål 1: Scener och occlusion culling-algoritm Metod för delmål 2: experiment Diskussion kring val av metod Genomförande Val av algoritm Occlusion culling-algoritm Skapa occlusion-volymer Occlusion culling med undansparade relationer Implementation i Unity spelmotor Scenen Dust Scenen Peach's Castle Scenen Lost Temple Resultat Presentation av undersökning Scenen Dust Scenen Peach's Castle Scenen Lost Temple Presentation av körningarna med Unitys algoritmer Scenen Dust Scenen Peach's Castle Scenen Lost Temple Analys Slutsats Sammanfattning Diskussion Framtida arbete Referenser... 30

4 1 Introduktion För att kunna skapa komplexa scener där det finns många objekt och där scenen kan flyta på i realtid har det forskats om tekniker för att eliminera objekt som inte är synliga. En av de teknikerna är occlusion culling och det är den tekniken som den här rapporten fokuserar på. När en grafisk applikation renderar en scen är det möjligt att objekt är dolda av varandra. En occlusion culling-algoritm går ut på att detektera de objekt som är dolda så att de dolda objekten inte behöver renderas (Chrysanthou, Cohen-Or, Durand & Silva, 2003; Coorg & Teller, 1996). Vanligtvis så används en delmängd av objekten i en scen som occluders. Denna delmängd bör bestå av de objekt som har störst potential att dölja andra objekt och enligt Bittner, Havran och Slavík (1998) kan det vara fördelsaktigt att bestämma potentiella occluders i ett förbehandlingssteg. Då är det viktigt att undersöka om en förändring i delmängden med occluders påverkar hur många objekt som är dolda i en scen. Olika scener kan ha stora variationer i hur de är uppbyggda så det är intressant att testa flera olika scener där förutsättningarna för occlusion culling inte är likadana. Forskning som finns för occlusion culling har fokuserat mest på stadsscener och inomhusmiljöer där det ofta finns lämpliga objekt som kan användas som occluders (Cohen, Hoff, Hudson, Lin, Manocha & Zhang, 1997; Manocha, Salomon & Yoon, 2003). Det här projektet undersöker en occlusion culling-algoritm i tre typiska spelscener för att kunna förstå påverkan tekniken kan ha på olika typer av spel. För varje scen så implementerades en automatisk kameraåkning som simulerar hur kameran vanligtvis förflyttar sig. För att få ett mätbart resultat kördes varje scen med tre olika mängder occluders. För varje körning sparades den genomsnittliga tiden av overheaden för occlusion culling-algoritmen och den genomsnittliga renderingstiden. Antalet renderade polygoner sparades ner från körningen som sedan sammanställdes i grafer så det går att se hur resultatet för de olika scenerna skiljer sig åt. 1

5 2 Bakgrund Det som gör att bl.a. utvecklare vill undersöka grafikalgoritmer är att de hela tiden vill att system ska använda så lite datorkraft som möjligt för att kunna göra mer. De mål som utvecklare vill uppnå i realtidsrendering är att ha många bilder per sekund, en högupplöst display och mer realistiska objekt i miljön. Bilder per sekund (frames per second eller förkortat FPS på engelska) är som namnet säger utritningsfrekvensen av miljön per sekund. Akenine-Möller och Haines (2002) underströk att det är viktigt att ha en stadig bilder per sekundfrekvens för att ha en mjuk och kontinuerlig erfarenhet. Idealet är att system renderar bilder med samma frekvens som sin monitors frekvens. Har program en låg bilder per sekundfrekvens så kan det kännas hackigt och med hjälp av algoritmer för att skära bort de objekt som är onödiga att rita ut kan det förbättra programmets bilder per sekundfrekvens. Att ha en hög bilder per sekundfrekvens behövs enligt Power och Rubino (2008) för att ge en känsla av sömlös, flytande interaktivitet. En av anledningarna till att programs bilder per sekundfrekvens ökar är att objekt som inte renderas inte behöver gå igenom den grafiska pipelinen där flera operationer utförs så som transformationer, ljusberäkningar och texturmappning m.fl. (Pantazopoulos & Tzafestas, 2002). 2.1 Culling-tekniker Cull betyder "att ta bort från en flock" (Akenine-Möller & Haines, 2002) och det är precis vad utvecklare gör när de implementerar culling-tekniker, de tar bort det från scenen som inte är nödvändigt att rita ut. En av de vanligare teknikerna som används är enligt Akenine-Möller och Haines (2002) t.ex. backface culling som eliminerar polygoner som är bortvända från kameran. De beskriver olika sätt att uppnå det och algoritmer kan t.ex. utföra operationer för att kontrollera att en ytas normal är bortvänd från kameran. En annan teknik som används är view frustum culling och den tekniken är lite mer komplex då den tar bort alla objekt som inte ligger inom kamerans view frustum. Algoritmen kan dra nytta av att utvecklaren använder sig av rumsindelningsstrukturer för att få en effektiv algoritm (Assarsson och Möller, 2000). Olika rumsindelningsstrukturer tas upp i nästa kapitel. De teknikerna leder fram till occlusion culling. Innebörden av den tekniken är att utvecklare inte vill rita ut de objekt som döljs av andra objekt för att det skulle vara onödigt. Power och Rubino (2008) uttrycker sig att program inte ska göra beräkningar på det som inte är synligt. Chrysanthou, Cohen-Or, Durand och Silva (2003) skriver att occlusion culling är global eftersom den berör ömsesidiga förhållande mellan polygoner och är därför mer komplex än backface culling och view frustum culling. Figur 1 nedan demonstrerar hur de tre olika teknikerna ser ut från fågelperspektiv när en kamera ser ut över en miljö. 2

6 view frustum occlusion eye backface view frustum Figur 1 En bild över olika culling-tekniker (efter Akenine-Möller & Haines, 2002). En annan teknik som används är portal culling som är användbar när scenen innehåller flera rum. Algoritmen delar in scenen i flera celler som ofta är rum eller korridorer och där dörrar eller fönster är portalerna mellan dem. Ett hus är ett bra lämpat objekt att dela upp med portaler och celler enligt Aila och Miettinen (2004). De skriver att spel ofta använder sig av den tekniken när scener består mestadels av inomhusmiljöer. Genom att använda sig av sitt view frustum kan algoritmen se vilka celler som är aktiva och systemet kan skippa att rendera de som inte är aktiva. Genom att associera objekt till de olika cellerna kan algoritmen också avgöra vilka objekt som behövs ritas ut genom att kontrollera de celler som är aktiva. Enligt Akenine-Möller och Haines (2002) är portal culling en variant av occlusion culling-tekniken men de skiljer på dem för att portal culling är en sådan viktig teknik. 2.2 Occluders En occluder är ett objekt som används i en occlusion culling-algoritm för att dölja andra objekt. De som skrivit algoritmer har därför lagt tid på att hitta sätt att välja ut objekt som är lämpliga som occluders. Från en godtycklig synvinkel är det ett fåtal polygoner som döljer flest objekt och att använda alla polygoner skulle öka overheaden av algoritmen utan att finna fler dolda objekt (Coorg & Teller, 1996). Aila och Miettinen (2004) skriver att inte alla synliga objekt är meningsfulla occluders. En klocka på väggen är överflödig eftersom väggen är en effektiv occluder och glas på ett bord är för små och p.g.a. deras transparens kommer de inte dölja något även om kameran ser på dem på nära håll. Av den anledningen är det generellt en optimering att välja en delmängd av alla synliga objekt som occluders. De nämner också att occluders närmare kameran oftare ger ett bättre resultat än de som är långt ifrån kameran. Occluder Utsiktspunkt Figur 2 Exempel på hur en occluder kan se ut i en scen (efter Cohen et al., 1997). 3

7 Chrysanthou et al. (2003) undersöker och sammanställer flera metoder som undersöker occlusion culling och skriver att metoderna använder antingen alla objekt som occluders eller en delmängd av objekten i scenen som occluders, vanligtvis stora objekt. Bittner, Havran och Slavík (1998), Cohen, Hoff, Hudson, Lin, Manocha och Zhang (1997) samt Coorg och Teller (1996) använder sig av rymdvinkeln för att väja ut occluders som har bra möjlighet att dölja en stor del av scenen. På så sätt får de ut ett estimat på hur stor del en occluder täcker från en utsiktspunkt. I figur 3 beskrivs formeln för att få ett rimligt estimat på rymdvinkeln av en occluder från en godtycklig position i scenen. A är arean av polygonen, N är normalvinkeln för polygonen, V är vinkeln som kameran är riktad och D är avståndet från kameran till mitten på polygonen. Figur 3 Formel för ett estimat av rymdvinkeln för en polygon (efter Coorg och Teller, 1997). De som har skrivit tekniker för att räkna ut konservativ synlighet klassificerar teknikerna som objektrums- och bildrumsalgoritmer (Cohen et al., 1997). Sättet som Chrysanthou et al. (2003) benämner det är bildprecisions- och objektprecisionsmetoder. Objektprecisionsmetoder använder obearbetad data för synlighetsförfrågningar och bildprecisionsmetoder använder den diskreta representationen av objekt som delats in i fragment under rasteriseringen. Pantazopoulos och Tzafestas (2002) uttrycker sig att ett kännetecken för objektrumsalgoritmer är att beräkningar görs i tredimensionella rummet. För bildrumsalgoritmer så görs beräkningar genom grundläggande bildbehandling. Det finns fördelar och nackdelar med algoritmerna och tidigare studier har noterat en del av dem. Vanligtvis så brukar objekt vara dolt av flera occluders kombinerade effekt. Att föra samman occluders så att synlighet på objekt testas mot sammanförda occluders är enligt Aila och Miettinen (2004) problematiskt för objektrumsalgoritmer men är enklare för bildrumsalgoritmer. Cohen et al. (1997) skriver också om problemen med att föra samman occluders i sin objektrumsalgoritm. Däremot så säger de att en fördel är att deras algoritm inte behöver en avancerad grafisk pipeline för att göra beräkningar. 2.3 Rumsindelningsstrukturer För att snabbt kunna svara på positionsförfrågningar i scenen och kunna möjliggöra olika tekniker för synlighet så säger Pantazopoulos och Tzafestas (2002) att utvecklaren av programmet bör dela upp scenen i spatiala datastrukturer. De presenterar fem av de vanligaste strukturerna som är ett vanligt rutnät, octrees, BSP-träd, kd-träd och bounding volume hierarki. Anledningen till att de är de mest kända strukturerna är att de är relativt effektiva och lätta att implementera. Problem som kan uppstå med de här strukturerna är bland annat om ett objekt ligger i två regioner samtidigt, skall utvecklaren då lägga objektet i båda regionerna eller duplicera objektet. Pantazopoulos och Tzafestas (2002) skriver att den vanliga rutnätsstrukturen har rutor där storleken och antalet rutor är bestämda i förväg vilket gör att den strukturen inte kan anpassa sig till scenen och gör att den inte är den mest användbara. Octrees bygger vidare på det vanliga rutnätet. I början är alla objekt bundna av en region som rekursivt delas in i åtta mindre regioner där de lagras och det upprepas tills strukturen 4

8 kommit till max djup eller att inga objekt finns i cellen och då har strukturen sina lövnoder. Det här leder till att vissa objekt lagras i mer än en lövnod. Octrees används också i occlusion culling algoritmer (Akenine-Möller & Haines, 2002). Meningen med den strukturen är att den är mer flexibel när det gäller densiteten och positionen för objekt i scenen. Figur 4 visar på hur skillnaden mellan vanliga rutnät och octrees kan se ut. Vanligt rutnät Octree Objekt Rutor med fast storlek Rutor med adaptiv storlek Figur 4 Vanligt rutnät- och octree-strukturerna (efter Pantazopoulos & Tzafestas, 2002). Binary Space Partitioning-träd, förkortas BSP-träd, är en annan rumsindelningsalgoritm. Först väljs en polygon ut för att dela rummet i två delar med hjälp av ett plan. Efter det läggs de andra polygonerna i rummet i någon av de två delmängderna och om någon polygon korsas av en linje så delas den polygonen in i två delar och en av varje del läggs i de olika delmängderna. Det här fortsätter rekursivt tills alla polygoner är i BSP-trädet. Det är enligt Akenine-Möller och Haines (2002) svårt att göra ett tidseffektivt BSP-träd och sådana träd beräknas oftast endast en gång för att användas senare i applikationen. kd-träd är en variant på ett BSP-träd som bygger på x-, y- och z-axlarna för att dela in polygonerna i olika regioner. Algoritmen fortsätter att dela upp rummet tills de uppsatta kriterierna blir uppnådda så som att användaren har satt ett maxdjup på trädet. Axis-aligned BSP tree är vad Bittner, Havran och Slavík (1998) kallar strukturen och de använder sig av den strukturen för att den är flexibel och enkel att bygga upp och traversera. Bounding Volume (BV) hierarkier är en rumsindelningsstruktur som enligt Pantazopoulos och Tzafestas (2002) är mer anpassat efter formen på objekt i scenen än de andra rumsindelningsstrukturerna. Ett skrivbords volym har rummets nod som anfader medan en lådas volym har skrivbordets nod som anfader. Dessa volymer kan vara sfärer eller boxar m.fl. och flera objekt i världen kan vara omslutna av andra volymer vilket betyder att de ligger längre ner i hierarkin. Manocha, Salomon och Yoon (2003) använder sig av oriented bounding boxes, OBBs, för att få en volym bättre anpassad till objekten i scenen. OBBs kräver att deras algoritm gör mer beräkningar än om deras algoritm skulle använt sig av sfärer eller axis aligned bounding boxes, AABBs, men deras algoritm strukturerar upp allt under förbehandling av scenen. Figur 5 visar hur BV hierarkier är uppbyggda. 5

9 Interna noder rotnod Figur 5 En BV hierarkisk struktur (efter Akenine-Möller & Haines, 2002). Dessa är några av de vanliga rumsindelningsstrukturerna som används för att möjliggöra de culling-tekniker som introducerades i förra delkapitlet. 2.4 Exempel på occlusion culling i praktiken Unity (2017) är en spelmotor som har inbyggt stöd för occlusion culling. Företaget som skapat systemet som Unity använder sig av är Umbra (2017). Det är många spelföretag som använder sig av Umbras system för bland annat occlusion culling. I spelet Doom som släpptes 2016 så finns Umbras system för occlusion culling och Courrèges (2016) skriver att det används i samband med spelets egna occlusion-förfrågningar. I manualen för Unity (2017) så finns det information om hur utvecklare skall gå till väga för att ha med occlusion culling i spelet som utvecklas och det nämns även att spelen får förbättrad prestanda då mindre anrop till motorns utritningsmetod utförs. Sättet utvecklare går till väga för att använda sig av occlusion culling i Unity är genom att sätta objekt till att antingen vara statiska occluders och/eller occludees. Occludees är objekt som kan döljas av occluders men döljer inte själv andra objekt. Det utvecklare måste tänka på är att om objekt är små eller transparenta är de inte lämpade som occluders. Markerar utvecklaren felaktigt objekt som occluders utför Unity onödiga beräkningar på dessa objekt. Unity delar också in scenen i celler som sparas i BSP träd. Två olika träd sparas för statiska och dynamiska objekt och används för att snabba upp occlusion-förfrågningar. När en utvecklare har bestämt alla inställningar kan occlusion data genereras och sparas ner som sedan används av systemet vid körning. 6

10 3 Problemformulering Det är viktigt att på ett effektivt sätt kunna identifiera polygoner som ska ritas ut och avfärda de osynliga polygonerna tidigt i grafikpipelinen (Coorg & Teller, 1997). På så sätt görs inga onödiga ljusberäkningar, texturmappning och liknande operationer på de dolda polygonerna och då sparas beräkningskraft. Att välja en delmängd av alla synliga objekt att använda som occluders förbättrar generellt sätt prestandan. Därför är det intressant att undersöka olika mängder med occluders i simuleringar och hur annorlunda resultatet blir med olika mängder. Tidigare projekt använder sina algoritmer i scener som de satt upp själva eller som de lånat från andra projekt. Därför är det också intressant att se hur occlusion culling presterar i scener som kommer från olika typer av spel där kameraåkningar och scener skiljer sig från varandra. Typiska scener i spel behöver inte nödvändigtvis ha objekt som uppenbart kan användas som occluders vilket gör att tester i sådana scener kan vara värdefullt att utföra. 3.1 Tidigare projekt 1: Occlusion culling för modeller med stora occluders Coorg och Teller (1997) gjorde en implementation av occlusion culling som fokuserar på att använda sig av stora occluders. I deras rapport kom de fram till en effektiv algoritm som gör att de kan skära bort en stor del av objekten i scenen så att de inte behöver ritas ut. Genom att använda sig av ett kd-träd för objekten i scenen kan de effektivt beräkna vilka delar som är synliga. De bygger upp trädet i ett förbehandlingssteg. De utnyttjar spatial och temporal koherens så att de inte hela tiden behöver bygga upp relationerna om vad som är dolt från grunden utan kan enklare återanvända de undansparade relationerna för att snabba upp förfrågningarna. De använder en liten delmängd av objekten i scenen som occluders vilket de motiverar med att det oftast är en få objekt som döljer större delen av geometrin i scenen. Vilka objekt som används som occluders sker dynamiskt när kameran ändrar position i scenen och beror på en estimering av rymdvinkeln. I projektet så skriver Coorg och Teller (1997) att deras algoritm använder sig av plan i den tredimensionella rymden för att upptäcka vilka objekt som är dolda vilket betyder att deras algoritm är en objektrumsalgoritm. Krav på att occluders ska vara konvexa finns också i deras algoritm för att undvika problem som kan uppstå med uträkningen av dolda objekt. Testerna som de utförde var att göra körningar i två olika scener där det fanns flera tusen objekt som kunde användas som occluders. Resultaten av deras experiment var att occlusion culling minskade renderingsbelastningen med en faktor av 6 till 8 än om de bara använde frustum culling när de gjorde sina tester. De sparar undan hur lång tid det tar att köra culling algoritmerna och hur lång tid det tar att rendera scenen. De uttrycker också att det hade varit intressant att undersöka scener som inte har stora occluders samt att undersöka hur det ser ut när algoritmen använder sig av olika antal occluders i sina beräkningar. 3.2 Tidigare projekt 2: Hierarkisk culling med occlusion trees Bittner, Havran och Slavík (1998) är också några som implementerat occlusion culling med hjälp av occlusion trees vilket är ett BSP träd som baseras på en mängd av occluders och en utsiktspunkt. De har även ett modifierat BSP träd för att visa på att deras modifierade träd kan förbättra prestandan. De har två olika algoritmer för att bestämma synligheten för en polyeder. Att använda sig av ett BSP träd gav dem en exakt algoritm när det gällde vad som 7

11 var synligt. Genom att använda deras modifierade BSP hade de också en konservativ algoritm för vad som var synligt. De använder sig inte av någon förbehandling för att välja ut occluders utan markerar endast objekt som kan användas som occluders vilket betyder att de behöver veta om hur scenen ser ut i förväg. Sedan använder de sig av alla potentiella occluders för att dynamiskt välja ut occluders under körning. För att bestämma värdet av potentiella occluders använder de en estimering av rymdvinkeln som gåtts igenom i tidigare kapitel. De bestämmer att alla occluders måste vara konvexa så att de kan bygga upp skuggvolymer som de bygger upp av plan vilket beräknas genom en utsiktspunkt och en occluder. Genom att räkna ut vad som ligger i skuggregionerna kan de bestämma de regioner som är synliga, delvis synliga och inte synliga. De använde sig av genomgångar i olika inomhusmiljöer för att mäta sina algoritmer och där så var det alltid tidseffektivare när de använde sig av sina olika algoritmer jämfört mot när de bara körde med view frustum culling. De testade även att använda sig av olika antal occluders. De summerade sina testfall och hur mycket tid som gick åt för att utföra de olika algoritmerna samt tiden för varje bildruta i scenen. Resultatet sparades ner för de olika algoritmerna som använde ett varierande antal occluders. Hur många polygoner som renderades sparades också ner. 3.3 Tidigare projekt 3: Accelerated occlusion culling using shadow frusta Cohen et al. (1997) skrev i sitt projekt om att occlusion culling kan delas in i två delproblem. Det första är att hitta en liten delmängd av rimliga occluders som kan användas. Med hjälp av delmängden kan det andra problemet lösas genom att den osynliga geometrin markeras så att den inte ritas ut. De två delproblemen är delvis oberoende av varandra och gås igenom i detalj i deras projekt. För att välja värdefulla occluders använder Cohen et al. (1997) sig av den estimerade rymdvinkeln på potentiella occluders för att få en uppfattning hur mycket geometri de kan dölja från en utsiktspunkt. Dessa potentiella occluders sparas ner i en spatial datastruktur i ett förbehandlingssteg som sedan används under deras körningar. Alla andra objekt i scenen sparas i en separat datastruktur. I deras förbehandlingssteg sparar de ner genomsnittet på hur många objekt en occluder döljer från olika regioner i scenen. De använder den informationen för att veta hur värdefulla potentiella occluders är i olika regioner och använder den informationen för att spara occluders som ger bra resultat. Under körning väljer de ut ett antal aktiva occluders som används till occlusion-förfrågningar. För att optimera sin algoritm så utnyttjar de temporal koherens genom att sortera listan av occluders efter de som dolde mest i förgående uppdatering. Deras occlusion culling-algoritm består av att bygga upp en occlusion-volym som är skuggan från alla potentiella occluders och sedan gör de tester för att se om objekt helt omsluts av den volymen vilket betyder att de är dolda. Sättet de bygger upp volymerna är att skapa plan från kanter på konvexa occluders i scenen. Sättet de mäter sin algoritm är att använda den i en stadsscen. De mäter hur lång tid varje uppdatering tar med bara view frustum culling jämfört med sin occlusion culling-algoritm. De skriver också ut genomsnittet på hur många polygoner som renderas per uppdatering. 8

12 Genomsnittet av dolda objekt ökar inte avsevärt desto fler occluders de använder i scenen när algoritmen använder i snitt 8 occluders per uppdatering. 3.4 Syfte och delmål Syftet med det här projektet är att se hur occlusion culling och hur valet av occluders kan förbättra prestandan i olika typer av vanliga scener från spel. Tidigare tester visar på att användandet av tekniken har lett till att scener renderas snabbare och det totala antalet polygoner som ritats ut reduceras. Eftersom tidigare projekt inte fokuserat på scener från spel i sina tester så är det intressant att se hur väl occlusion culling fungerar i just sådana scener. Det är även intressant att se hur valet av antalet occluders som används påverkar hur mycket geometri som ritas ut samt vad det blir för overhead på algoritmen när antalet varieras Delmål 1: scener och occlusion culling-algoritm Det första delmålet i projektet är att skapa olika scener som är baserade på olika typer av spel. I de här scenerna ska typiska kameraåkningar för just den speltypen sättas upp så att det efterliknar hur det vanligtvis ser ut i spelet. Det krävs att en algoritm för occlusion culling implementeras som kan användas i de här scenerna. Det skall gå att bestämma hur många occluders som skall användas vid varje körning. Efter en körning har genomförts så skall information från körningen sparas ned. Det som behövs är renderingstiderna, overheaden av att köra occlusion culling-algoritmen och antalet polygoner som ritas ut i varje uppdatering Delmål 2: utvärdering Det här delmålet går ut på att utvärdera körningar i scenerna som satts upp för att se hur väl occlusion culling fungerar i dem. Scenerna ska köras med olika antal occluders så att det ger en förståelse av effekten med att ha ett varierande antal med occluders genom att sammanställa resultatet från körningarna och jämföra med varandra. Det här projektet ska undersöka om det är stora skillnader i tiderna för rendering och overheaden med occlusion culling-algoritmen. Det ska också undersöka hur mycket geometri som inte renderas ut när algoritmen kör med ett varierat antal med occluders. 3.5 Metodbeskrivning Projektet har möjliggjorts genom att använda sig av metoder som liknar de som finns i tidigare projekt. Den första metoden som presenteras handlar om hur scenerna har satts upp och algoritmen som implementerats för occlusion culling. Den andra metoden är själva experimentet i de scener som satts upp och mätningen av värdena som givits av körningarna Metod för delmål 1: Scener och occlusion culling-algoritm För att realisera det första delmålet så implementerades en objektrumsalgoritm för occlusion culling i Unity. I algoritmen finns det möjlighet att välja hur stor mängd av occluders som ska användas i en körning. Occluders sorteras i storleksordning när de väljs ut. För att kunna utvärdera algoritmen så lades det till tidtagning för hur lång tid det tar att köra occlusion culling-algoritmen samt hur lång tid det tar att rendera en scen. Det lades till stöd för att räkna ut totalt antal polygoner i en scen och hur många som ritas ut. Det skapades tre olika scener som efterliknar olika speltyper. De scener som skapats är Dust 2 från Counter-Strike spelserien av Valve Corporation (2012), Peach's Castle från Super Mario 64 av Nintendo (1996) och Lost Temple från Starcraft 2 av Blizzard Entertainment 9

13 (2010). De här scenerna sattes upp i Unity. I dessa scener så skapades automatiserade kameraåkningar som beter sig som kamerorna vanligtvis gör för dessa spel så det ges en överblick hur väl occlusion culling-algoritmen kan prestera för de olika spelen. Anledning till att just de här spelen valdes var för att de skiljer sig i hur scenerna normalt är uppbyggda samt till att kameran i spelen skiljer sig åt så det ger en förståelse för hur väl occlusion culling kan prestera i liknande spel Metod för delmål 2: experiment I det andra steget så utvärderades de scener som satts upp genom att göra tre körningar per scen med 5%, 10% och 20% av alla occluders. Eftersom det satts upp automatiserade kameraåkningar så var förutsättningarna likvärdiga för varje körning och scenerna förändrades inte på något sätt. Overheaden för att köra occlusion culling förväntades vara större när fler occluders användes. Resultaten av körningarna infördes i tabeller och grafer för att få en överblick av tiden det tar att rendera scenen, overheaden av algoritmen och antalet renderade polygoner så det ger en bild av hur scenerna påverkades av det här projektets occlusion culling. Scenen som baseras på Dust 2 förväntades att påverkas mest av olika antal occluders då den scenen är uppdelad i naturliga regioner med flera occluders som skiljer dem åt. Scenen borde också vara den som får mest värde av att använda sig av occlusion culling-algoritmen jämfört med de andra scenerna. Den scen som är baserad på Peach's Castle förväntades att inte påverkas så mycket när körningar med olika antal med occluders genomfördes. Eftersom det är en öppen scen finns det få objekt som döljer mycket geometri och endast från ett fåtal utsiktspunkter där det är många objekt som kan döljas. Scenen som liknar Lost Temple förväntades att inte ha nån större skillnad med olika antal occluders då kameran alltid ser ner över scenen där det knappt döljs några objekt. Det borde alltid vara rätt jämt mellan körningarna i hur många objekt som renderas. Den occlusion culling som finns inbyggt i Unity användes också i en körning per scen med de standardvärden som Unity ger. En körning utan någon occlusion culling kördes också och då används den view frustum culling som alltid är påslagen i Unity. I de körningarna så mättes endast overheaden för culling och hur lång tid det tar att rendera scenen då möjligheten att räkna antalet renderade polygoner inte fanns tillgänglig Diskussion kring val av metod I det här projektet valdes det att utföra experimenten med de ovannämnda metoderna för att försöka efterlikna de tidigare projektens metoder. På så sätt kan resultat som ges i det här projektet enklare jämföras mot resultaten från deras projekt. Det är enkelt att upptäcka fel i det här projektet om värden som fås från experimenten inte ligger i närheten av de förväntade resultaten. Att utvärdera occlusion culling i olika speltyper kan ge insikt i när den tekniken är lämplig att använda. Det är intressant att se hur väl algoritmen i det här projektet presterar i jämförelse med den algoritm som finns i Unity. Då kan utvecklare se om det är värt att lägga tid på att utveckla sina egna algoritmer eller om det är lika bra att använda sig av Unitys algoritm. 10

14 4 Genomförande I detta kapitel görs en genomgång av implementationen som valts för det här arbetet och avvägningar för valet av algoritmen. Den mest komplicerade beskrivningen är den om occlusion culling-algoritmen och den valda lösningen där. Det finns en jämförelse över hur en scen ser ut med och utan occlusion culling. Arbetet i Unity beskrivs och hur resultatet av körningarna samlats in. Sist i kapitlet finns det en genomgång av de scenerna som satts upp och valet av att använda dem i det här projektet. 4.1 Val av algoritm I det här projektet så implementerades en occlusion culling-algoritm som gör beräkningar i objektrummet. En anledning till det valet var att studier utfördes på tidigare projekt som implementerat objektrumsalgoritmer och de kunde visa på stora förbättringar i körningar i sina scener. Coorg & Teller (1997) gjorde en objektrumsalgoritm som de använde i två olika scener där det förbättrade renderingstiderna. Bittner, Havran och Slavík (1998) gjorde också en objektrumsalgoritm som de använde i olika inomhusscener för sina mätningar. Cohen et al. (1997) har också gjort en objektrumsalgoritm som fungerar likt de andra och använder den i en stadsscen där de utförde olika mätningar. En annan anledning till att det implementerades en objektrumsalgoritm var att de bildrumsalgoritmer som studerades var komplicerade och svåra att förstå. Att implementera en bildrumsalgoritm hade tagit lång tid och projektet hade inte hunnit bli klart. Tiden det tog att implementera algoritmen var över förväntningarna och därför implementerades endast en algoritm. Att dela upp scenerna i regioner med hjälp av en rumsindelningsstruktur hade varit bra för att optimera algoritmen som flera tidigare projekt visat. Att ha flera objekt del av en region gör att algoritmen kan eliminera hela regionen om den är dold istället för att kontrollera varje objekt i regionen. Det tog dock så lång tid att utveckla algoritmen och att få den att fungera med enklare bounding volumes så då gjordes valet att inte implementera en rumsindelningsstruktur. 4.2 Occlusion culling-algoritm En algoritm för occlusion culling har implementerats. Det är möjligt att välja hur många occluders från en scen som ska användas av algoritmen. En anledning till det är att om alla objekt används som occluders så får algoritmen en tidskomplexitet på O(n 2 ) där n är antal objekt i scenen. Att undersöka hur algoritmen påverkas av olika antal med occluders är en annan anledning. Bittner, Havran och Slavík (1998) utförde experiment med olika antal av occluders för att se påverkan på deras körningar. Cohen et al. (1997) lägger också stor vikt på valet av occluders och dess inverkan på resultaten. De beskriver att när de ökar antalet occluders bortom en viss gräns så ses inte stora förbättringar i deras tester. Aila & Miettinen (2004) beskriver hur de tar en delmängd av synliga objekt som occluders för att öka prestandan. För att kunna undersöka hur effektiv algoritmen är så har stöd lagts till för att mäta tiden det tar att utföra beräkningarna samt hur många polygoner som ritas ut Skapa occlusion-volymer Sättet som Cohen et al. (1997), Bittner, Havran och Slavík (1998) och Bacik (2002) utför sina occlusion-förfrågningar är att de bygger en occlusion-volym och alla objekt som ligger i den 11

15 volymen är då dolda. Figur 6 visar hur en sådan volym kan se ut. I deras projekt så är alla occluders konvexa objekt för att planen som används inte ska returnera fel information om ett objekt är dolt eller inte. I det här projektet så används enkla axis aligned bounding boxes, AABBs, för att bygga upp occlusion-volymer. Anledningen till det var att det blev komplext nog att implementera en lösning som fungerar dynamiskt med flera objekt i scenen. I scenerna är det endast kuber som markeras som potentiella occluders för att sfärer med dess omslutande AABB skulle ge en felaktig occlusion-volym. Polygoner som är riktade mot kameran Utsiktspunkt Occluder Occlusion-volym Figur 6 En representation av en occlusion-volym (efter Bacik, 2002) I ett förbehandlingssteg så sparas det för varje occluder dess polygonytor med polygonytornas tillhörande kanter när användaren startar programmet. Det här uppdateras inte under körning då alla occluders är statiska. Det som uppdateras under körning är vilka kanter och polygonytor som är synliga samt avståndet till kameran vilket används för beräkningen av occlusion-volymen. Om en potentiell occluder inte blir vald i förbehandlingssteget så markeras den att istället vara en occludee i körningen. I det här projektet gjordes beslutet att inte ha objekt som rör på sig under körning eftersom alla objekt har en lista med hörn som används för att göra kontroller om det är synligt eller inte. Om det funnits en rumsindelningsstruktur hade objekt som rör på sig behövt hanteras separat. Att uppdatera positionen på objektet skulle inte förändra själva algoritmen även om resultatet av körningarna påverkats Occlusion culling med undansparade relationer Occlusion-algoritmen består av flera viktiga delar. Eftersom det är en fördel att utföra så få jämförelser som möjligt sparas alla relationer om vilken occluder som döljer vilken occludee i en hashtabell. Om en occludee inte är dold av någon occluder kommer det ske jämförelse mot samtliga synliga occluders. För att möjliggöra uppbyggandet av occlusion-volymer så används funktionen getvisibleoccluderpart som beskrivs i figur 7. Genom den hämtar algoritmen de kanter och polygonytor i form av plan som används när algoritmen senare bygger upp alla de plan som utgör en occlusion-volym i updateocclusionvolume som beskrivs i figur 8. function getvisibleoccluderpart(occluder o) b = boxens plan med tillhörande kanter som tillhör o om(b == NULL) return töm listan o.synligakanter töm listan o.synligaplan för alla plan med tillhörande kanter i b om(planets avstånd från origo + skalärprodukten av planets normal 12

16 och kamerans position >= 0) för alla kanter för planet om(kanten finns i o.synligakanter) ta bort kanten annars lägg till kanten lägg till planet Figur 7 Pseudokod för när algoritmen uppdaterar en occluders synliga polygoner och kanter. function updateocclusionvolume(occluder o) töm listan o.occlusionfrustum för alla sidor i o.synligakanter ny normal n n = kryssprodukten av kantens första hörn - kamerans position och kantens andra hörn - kamerans position lägg till nytt plan i o.occlusionfrustum med normaliserad normal n och positionen kantens första hörn för alla plan i o.synligaplan lägg till plan i o.occlusionfrustum Figur 8 Pseudokod för när algoritmen uppdaterar en occluders occlusion-volym. I updatevisibleoccluders markeras de occluders som ska användas för occlusionförfrågningarna. Funktionen kontrollerar om en occluder ligger i kamerans view frustum. Den kontrollerar även om occludern döljs av andra occluders för att inte använda redan dolda occluders. Om en occluder som var synlig i förra uppdateringen är dold uppdateras relationstabellen och occluderns relaterade occludees plockas bort. Det här beskrivs i detalj i figur 9. function updatevisibleoccluders() töm listan visibleoccluders för alla occluders om(occludern är i kamerans view frustum) dold = false för alla synliga occluders om(occluder döljs av synlig occluder) occluder.renderer = false dold = true break om(dold == false) occluder.renderer = true getvisibleoccluderpart(occluder) updateocclusionvolume(occluder) lägg till occluder i visibleoccluders töm listan toremove för alla occludee i occludedby.keys om(visibleoccluders inte innehåller occludedby.getvalue(occludee)) lägg till occludee i toremove occludee.renderer = true för alla occludee i toremove ta bort occludee från occludedby Figur 9 Pseudokod för att uppdatera synliga occluders. För att ta reda på vilka occludees som är potentiellt synliga kontrollerar algoritmen om de är i kamerans view frustum. Är de det läggs de till i en lista över potentiellt synliga occludees. 13

17 Annars görs en kontroll för att se om de var dolda i förra uppdatering. Var de dolda i förra uppdateringen och inte är i kamerans view frustum tas de bort från relationstabellen då det inte behöver ske ytterligare kontroller för att se om de är synliga eller inte. Om de inte är potentiellt synliga och inte var dolda i förra uppdateringen så flaggas de att inte renderas. När all information om vilka occluders som skall användas och vilka occludees som potentiellt är synliga samlats ihop utförs algoritmens sista steg. För alla potentiellt synliga occludees görs en kontroll om de är dolda eller inte. Om en occludee var dold i förra uppdateringen kontrolleras endast den occludern som dolde occludeen. Är objektet inte längre dolt så tas den bort från relationstabellen och flaggas att den ska renderas. Annars görs kontroller mot alla occluders och är objektet dolt så flaggas den att den inte ska renderas samt så läggs relationen om vilken occluder som dolde den till i relationstabellen. Är objektet inte dolt så flaggas det att det ska renderas. Funktionen IsOccluded är rättfram och beskrivs i figur 10. function IsOccluded(lista av plan p, lista av hörn) för alla hörn för alla plan om(planets avstånd från origo + skalärprodukten av planets normal och hörn >= 0 return false return true Figur 10 Pseudokod för att bedöma om ett objekt är dolt. I figur 11 så kan en testscen beskådas utan några beräkningar som kan jämföras mot figur 12 som visar användningen av occlusion culling. Figur 11 Skärmdump från en scen utan occlusion culling. 14

18 Figur 12 Skärmdump från en scen med occlusion culling igång. 4.3 Implementation i Unity spelmotor För att kunna sätta upp scener på ett enkelt sätt så bestämdes det att implementera lösningen i Unity spelmotor med C#-skript. På så sätt var det enkelt lägga till objekt och bygga upp lösningen från grunden istället för att försöka lägga till det i ett tidigare spelprojekt som författaren av det här arbetet tagit del av där tanken på att ha stöd för culling-algoritmer inte fanns. Att bygga upp allt från grunden i OpenGL hade också tagit lång tid för att nå samma resultat som åstadkommits med hjälp av Unity. I Unitys editor kan utvecklaren lägga till objekt i scener. Till dessa objekt kan utvecklaren lägga till komponenter vilket kan vara saker som renderingskomponent, kamerakomponent, kolliderarkomponent eller eget skrivna skript. Genom att utnyttja detta systemet kan utvecklaren snabbt stänga av och på renderingskomponenter samt de skript utvecklaren skrivit. För att alla testfall ska ha samma förutsättningar är det möjligt att animera en kameraåkning som kan användas i scenerna. För att kunna utvärdera algoritmerna så valdes det att mäta hur lång tid det tar för cullingalgoritmerna att köra. Alla värden sparas för att sammanställas i en lista som skrivs ut när körningen är klar. Samma sammanställning sker för renderingstiderna som sparas i en egen fil. Antal renderade polygoner i varje bild sparas också till fil. Slutligen så summeras körningen där det som sparas är den genomsnittliga tiden att köra culling-algoritmen, den genomsnittliga renderingstiden, hur många polygoner det finns totalt i scenen och hur många polygoner som renderas i snitt i procent. Det sparas även hur många occluders som användes i körningen och hur stor procent av alla potentiella occluders som valdes. Figur 13 visar exempel på hur filen kan se ut efter att programmet har körts. 15

19 Figur 13 Skärmdump av summeringen från en körning. De körningar som sker med och utan Unitys occlusion culling-algoritm sparar endast overheaden det tar att utföra culling och tiden det tar att rendera scenen. Anledningen är att Unity inte har ett API för att hämta antalet renderade polygoner. I det här projektets occlusion culling-algoritm så räknas antalet renderade polygoner manuellt. Det fanns inte tid att försöka lägga till den funktionaliteten för Unitys körningar Scenen Dust 2 Scenen som baseras på Dust 2 visas i figur 14. Det som är intressant med den scenen är att den är en lämplig kandidat för occlusion culling. Tidigare projekt har fokuserat mycket på inomhusmiljöer eller scener med stora occluders och i den här scenen så finns det lite av båda. Kameraåkningen sker strax ovanför marknivå genom scenen. Den är återskapad för att efterlikna hur det vanligtvis ser ut i spelserien Counter-Strike. Figur 14 Överblick av scenen Dust 2 i Unity Scenen Peach's Castle Den här scenen baseras på öppningssekvensen av Super Mario 64 och kan beskådas i figur 15. I det spelet så fokuserar kameran på spelaren och följer efter den vanligtvis en bit över marken. Det intressanta med den här scenen är att det är mycket mindre naturliga occluders i jämförelse med Dust 2. Det finns en del stora occluders men de är inte utplacerade så att de döljer många objekt. 16

20 Figur 15 Överblick av scenen Peach's Castle i Unity Scenen Lost Temple Den scen som är minst lämpad för occlusion culling är scenen Lost Temple från Starcraft 2 och det här projektets tolkning kan beskådas i figur 16. I det här spelet så är kameran vanligtvis i luften och blickar ner mot marken. Eftersom kameran alltid har en överblick ovanifrån så är det få objekt som döljs. Det är därför intressant att se om det finns något värde i att använda occlusion culling i en sådan scen. Figur 16 Överblick av scenen Lost Temple i Unity. 17

21 5 Resultat I det här kapitlet finns resultaten av de utförda experimenten. Först så summeras körningarna i de olika scenerna och effekten av att använda en varierande mängd occluders i de scener som har satts upp. Antalet utritade polygoner visas också för varje körning för att få grepp om hur valet av occluders påverkar körningarna. Eftersom det inte var möjligt att få ut samma information i körningarna gjorda med Unitys algoritmer så presenteras det resultatet separat. Slutligen så analyseras resultatet av experimentet och så beskrivs de slutsatser som har gjorts. 5.1 Presentation av undersökning För att få en förståelse för hur väl algoritmen ter sig för olika speltyper har algoritmen använts i scener som skiljer sig från varandra i hur de är uppbyggda och hur kameraåkningar vanligtvis ser ut för de speltyperna. Tidigare projekt har ofta fokuserat på scener där occlusion culling förväntades ge ett bra resultat. I det här projektet har scenerna varierats för att simulera hur olika speltyper är uppbyggda. Undersökningen i det här projektet utfördes på ett sätt så att det enkelt går att jämföra med resultat från tidigare projekt. För att få en överblick av resultatet så summeras körningarna från scenerna. Varje körning har utförts i totalt 3600 bildrutor där tiden för overheaden av algoritmen och tiden för rendering varierar. För att ge en tydlig bild hur algoritmen presterade under körningarna så presenteras den genomsnittliga tiden samt det minsta och högsta värdet för overheaden av algoritmen. Notera att de 10 första bildrutorna inte inkluderades när det högsta värdet valdes ut då det tar några bildrutor innan körningen har startat helt och hållet. Antalet occluders som valts ut av den totala mängden med potentiella occluders presenteras. Antalet varierar för varje scen då potentiella occluders skiljer sig mellan scenerna. Efter det så presenteras de renderingstider som gavs under körningarna. Även för renderingstiderna så användes inte de 10 första bildrutorna när det högsta värdet på renderingstiden valdes ut. Genomsnittet på hur många polygoner som renderades under körningen presenteras för att ge en överblick på hur mycket algoritmen påverkade en scen. Grafer för hur många polygoner som renderades i varje bildruta presenteras för att ge en bild av hur körningarna skiljer sig åt Scenen Dust 2 I det här delkapitlet presenteras resultatet av algoritmen för scenen Dust 2. Som det går att se i tabell 1 så ökar overheaden för algoritmen när fler occluders används. I tabell 2 går det att se att renderingstiden sjunker när fler occluders används och att antalet renderade polygoner reduceras också när fler occluders används. Det finns perioder i körningarna där lite eller ingen culling utförs vilket syns då den minsta tiden för rendering är nästan likadan. 18

22 Tabell 1 Tabell som visar overhead av algoritmen i körningarna från scenen Dust 2. Antal occluders procent i Antal utvalda occluders Genomsnittlig overhead Minsta overhead Högsta overhead 5% % % Tabell 2 Tabell som visar renderingstiderna i körningarna från scenen Dust 2. Antal occluders i procent Genomsnittlig renderingstid Minsta renderingstid Högsta renderingstid Renderade Polygoner % 5% % % Figur 17 visar hur många polygoner som ritades ut under tre körningar med olika mängd occluders där varje körning pågick i 3600 bildrutor. Totalt finns det polygoner i scenen. Som det går att se i grafen så ritas mindre polygoner ut när fler occluders i scenen används. Vissa perioder i körningarna renderas samma geometri vilket innebär att kurvorna överlappar vid de bildrutorna. Dock så är det aldrig fler polygoner som renderas i de körningar som använder fler occluders jämfört med körningarna som använder ett mindre antal occluders. 19

23 Polygoner Dust 2 renderade polygoner % occluders 10% occluders 20% occluders Bildruta Figur 17 Hur många polygoner som renderades i Dust Scenen Peach's Castle I det här delkapitlet presenteras resultatet av algoritmen för scenen Peach's Castle. Tabell 3 visar att overheaden för algoritmen ökar med mer utvalda occluders som förväntat. Algoritmen presterar inte mycket bättre i den här scenen som det går att se i tabell 4. När antalet utvalda occluders ökar så sjunker inte den genomsnittliga renderingstiden så mycket. Det är också liten skillnad på hur många polygoner som ritas ut i genomsnitt under körningen. Tabell 3 Tabell som visar overhead av algoritmen i körningarna från scenen Peach's Castle. Antal occluders procent i Antal utvalda occluders Genomsnittlig overhead Minsta overhead Högsta overhead 5% % %

24 Polygoner Tabell 4 Tabell som visar renderingstiderna i körningarna från scenen Peach's Castle. Antal occluders i procent Genomsnittlig renderingstid Minsta renderingstid Högsta renderingstid Renderade Polygoner % 5% % % Scenen som liknar Peach's Castle visar på att när det är en mer öppen scen så reduceras inte antalet renderade polygoner markant när antalet occluders ökar. I figur 18 visas antalet utritade polygoner för de tre körningarna där varje körning skett i totalt 3600 bildrutor. Scenen innehåller totalt polygoner. I de körningar som valt ut fler occluders renderas aldrig mer polygoner jämfört med de körningar som valt ut ett mindre antal occluders Peach's Castle renderade polygoner % occluders 10% occluders 20% occluders Bildruta Figur 18 Hur många polygoner som renderades i Peach's Castle Scenen Lost Temple I det här delkapitlet presenteras resultatet av algoritmen för scenen Lost Temple. Scenen innehåller totalt sett mindre potentiella occluders. Som det går att se i tabell 5 så ökar overheaden av algoritmen endast lite när fler occluders används. Tabell 6 visar att det inte är så stor skillnad i renderingstiderna och att antalet utritade polygoner är samma för varje körning. 21

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling Spelutveckling - Scenegrafer Scenegrafer Optimeringar Culling Scenegraf vad och varför? En hierkisk representation av en 3d-värld Directed acyclic Graph (DAG) Består av noder med med barn/föräldrar Gör

Läs mer

Rastrering och displayalgoritmer. Gustav Taxén

Rastrering och displayalgoritmer. Gustav Taxén Rastrering och displayalgoritmer Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Klippning Man vill undvika att rastrera de primitiver som hamnar utanför fönstret. Man

Läs mer

UTVÄRDERING AV ALGORITMER FÖR BRED KOLLISIONSDETEKTERING MED HJÄLP AV BOIDS ALGORITM

UTVÄRDERING AV ALGORITMER FÖR BRED KOLLISIONSDETEKTERING MED HJÄLP AV BOIDS ALGORITM Malskapada v Henrik UTVÄRDERING AV ALGORITMER FÖR BRED KOLLISIONSDETEKTERING MED HJÄLP AV BOIDS ALGORITM EVALUATION OF ALGORITHMS USED FOR BROAD PHASE COLLISION DETECTION USING BOIDS ALGORITHM Examensarbete

Läs mer

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte Sammanfattning Vi har i kursen Modelleringsprojekt TNM085 valt att simulera ett geléobjekt i form av en kub. Denna består av masspunkter som är sammankopplade med tre olika typer av fjädrar med olika parametrar.

Läs mer

Algoritmer för gallring av dolda ytor Johannes Staffans Institutionen för informationsbehandling Åbo Akademi, FIN-20520 Åbo, Finland e-post:

Algoritmer för gallring av dolda ytor Johannes Staffans Institutionen för informationsbehandling Åbo Akademi, FIN-20520 Åbo, Finland e-post: Algoritmer för gallring av dolda ytor Johannes Staffans Institutionen för informationsbehandling Åbo Akademi, FIN-20520 Åbo, Finland e-post: johannes.staffans@abo.fi Referat Ett datorprogram som renderar

Läs mer

Grafiska pipelinen. Edvin Fischer

Grafiska pipelinen. Edvin Fischer Grafiska pipelinen Edvin Fischer Sammanfattning Rapporten behandlar den grafiska pipelinen och dess steg, vilka stegen är och hur de funkar. Inledning Rapporten har till syfte att beskriva hur den grafiska

Läs mer

Universe Engine Rapport

Universe Engine Rapport 1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten

Läs mer

Anpassningsbar applikationsstruktur för flerpunktsskärmar

Anpassningsbar applikationsstruktur för flerpunktsskärmar Datavetenskap Opponent(er): Rikard Boström Lars-Olof Moilanen Respondent(er): Mathias Andersson Henrik Bäck Anpassningsbar applikationsstruktur för flerpunktsskärmar Oppositionsrapport, C/D-nivå 2005:xx

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Programmering = modellering

Programmering = modellering Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre

Läs mer

Konvexa höljet Laboration 6 GruDat, DD1344

Konvexa höljet Laboration 6 GruDat, DD1344 Konvexa höljet Laboration 6 GruDat, DD1344 Örjan Ekeberg 10 december 2008 Målsättning Denna laboration ska ge dig övning i att implementera en algoritm utgående från en beskrivning av algoritmen. Du ska

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift

Läs mer

After Effects Lathund

After Effects Lathund After Effects After Effects Lathund After Effects En komposition är det samma som ett filmklipp i After Effects. En komposition kan vara hela filmen/ animationen eller så använder man sig av flera kompositioner

Läs mer

Procedurell renderingsmotor i Javascript och HTML5

Procedurell renderingsmotor i Javascript och HTML5 Procedurell renderingsmotor i Javascript och HTML5 TNM084 Procedurella Metoder för bilder Gustav Strömberg - gusst250@student.liu.se http://gustavstromberg.se/sandbox/html5/shademe/texture_stop_final.html

Läs mer

JavaScript del 5 Funktioner

JavaScript del 5 Funktioner JavaScript del 5 Funktioner När man skriver JavaScriptkod eller program i andra programmeringsspråk för den delen så kan det finnas anledningar till att man vill dela upp sitt stora program i flera mindre

Läs mer

Programmeringsuppgift Game of Life

Programmeringsuppgift Game of Life CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade

Läs mer

Föreläsning 5: Grafer Del 1

Föreläsning 5: Grafer Del 1 2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första

Läs mer

Grafiska pipelinens funktion

Grafiska pipelinens funktion LUNDS TEKNISKA HÖGSKOLA CAMPUS HELSINGBORG Grafiska pipelinens funktion Ludvig von Sydow EDT62, HT17 Datorarkitekturer med Operativsystem Sammanfattning Denna rapport syftar till att beskriva hur en graphics

Läs mer

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Onsdag 20/8 2014 kl 14-18 SP71 Inga hjälpmedel Tentamen innehåller 7 uppgifter, vilka tillsammans kan ge maximalt 50 poäng. För betyg G (registreras som

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen TEN1 HI1029 2014-05-22 Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Ansiktsigenkänning med MATLAB

Ansiktsigenkänning med MATLAB Ansiktsigenkänning med MATLAB Avancerad bildbehandling Christoffer Dahl, Johannes Dahlgren, Semone Kallin Clarke, Michaela Ulvhammar 12/2/2012 Sammanfattning Uppgiften som gavs var att skapa ett system

Läs mer

Datastrukturer och Algoritmer D0041D

Datastrukturer och Algoritmer D0041D Luleå Tekniska Universitet 19 mars 2014 Laborationsrapport Laboration 3 Datastrukturer och Algoritmer D0041D Primms Algoritm Namn E-mail Magnus Björk magbjr-3@ltu.student.se Handledare Felix Hansson Primms

Läs mer

Ekvivalensrelationer

Ekvivalensrelationer Abstrakt datatyp för disjunkta mängder Vi skall presentera en abstrakt datatyp för att representera disjunkta mängder Kan bl.a. användas för att lösa ekvivalensproblemet avgör om två godtyckliga element

Läs mer

Hemtenta i Grafik och Interaktionsprogrammering Martin Berglund Uppgift 1 Föreläsning 1 Föreläsning 2 föreläsning 3 föreläsning 4

Hemtenta i Grafik och Interaktionsprogrammering Martin Berglund Uppgift 1 Föreläsning 1 Föreläsning 2 föreläsning 3 föreläsning 4 Hemtenta i Grafik och Interaktionsprogrammering Martin Berglund 830130-0078 Uppgift 1 Jag har länge och väl funderat över på vilket sätt som vore bäst att beskriva vad jag har lärt mig under kursens gång

Läs mer

Mayas UI. Grundläggande UI. Dag Stensson 2009

Mayas UI. Grundläggande UI. Dag Stensson 2009 Mayas UI Mayas UI (User Interface eller användargränssnitt) är tämligen komplicerat jämfört med Adobe Photoshop eller andra liknande verktyg. Oroa dig inte, det blir lite bättre med tiden. Ni kommer att

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2014-04-25, 14:00 18:00. Författare: Nils Anders Danielsson. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker

Läs mer

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Lösningsförslag för tentamen i Datastrukturer (DAT037) från Lösningsförslag för tentamen i Datastrukturer (DAT7) från --9 Nils Anders Danielsson. Träd- och köoperationerna har alla tidskomplexiteten O(log s), där s är antalet element i trädet/kön (notera att jämförelser

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037) Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca

Läs mer

Regression med Genetiska Algoritmer

Regression med Genetiska Algoritmer Regression med Genetiska Algoritmer Projektarbete, Artificiell intelligens, 729G43 Jimmy Eriksson, jimer336 770529-5991 2014 Inledning Hur många kramar finns det i världen givet? Att kunna estimera givet

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 10 Anton Grensjö grensjo@csc.kth.se 9 november 2017 1 Idag En konstruktionsreduktion Fler bevis av NP-fullständighet 2 Teori Repetition Ett problem tillhör

Läs mer

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen Datastrukturer och algoritmer Föreläsning 15 Inför tentamen 1 Innehåll Kursvärdering Vi behöver granskare! Repetition Genomgång av gammal tenta 2 Första föreläsningen: målsättningar Alla ska höja sig ett

Läs mer

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) Snabba frågor Alla svar motiveras väl. Facit Tentamen TDDC30 2015-08-28 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är syftet med ett interface? (1p) Svar:Att ange vilka metoder som ska finnas, utan

Läs mer

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim  Agenda (halvdag) Objektorienterad programmering Föreläsning 8 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Objektorienterad programutveckling Algoritmer Algoritmkonstruktionerna Relationer

Läs mer

Symboler och abstrakta system

Symboler och abstrakta system Symboler och abstrakta system Warwick Tucker Matematiska institutionen Uppsala universitet warwick@math.uu.se Warwick Tucker, Matematiska institutionen, Uppsala universitet 1 Vad är ett komplext system?

Läs mer

Uppdrag för LEGO projektet Hitta en vattensamling på Mars

Uppdrag för LEGO projektet Hitta en vattensamling på Mars LEGO projekt Projektets mål är att ni gruppvis skall öva på att genomföra ett projekt. Vi använder programmet LabVIEW för att ni redan nu skall bli bekant med dess grunder till hjälp i kommande kurser.

Läs mer

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning Karlstads GeoGebrainstitut Institutionen för matematik och datavetenskap Karlstads universitet Mats Brunström Maria Fahlgren GeoGebra ett digitalt verktyg för framtidens matematikundervisning Invigning

Läs mer

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR)

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR) Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR) Grupp: MT2 och NO2MT Datum: Fredagen den 23 april 2004 Tid: 14.00-18.00 Hjälpmedel: inga Ansvarig lärare: Stefan

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5 Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor 1 Laboration 4 - Introduktion Syfte: Öva på självständig problemlösning

Läs mer

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

if (n==null) { return null; } else { return new Node(n.data, copy(n.next)); Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls

Läs mer

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt. 1 Samlingar 1.1 Frekvenstabell En Integer är icke-muterbar (precis som String, Float, Boolean et.c.). Ickemuterbarhet har många fördelar, men en nackdel är att ett helt nytt objekt måste skapas när ett

Läs mer

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Dag Wedelin, bitr professor, och K V S Prasad, docent Institutionen för data- och

Läs mer

Huvudfunktioner Arbetet i DEROB-LTH är grupperat i sju huvudfunktioner: File, Project, Case, Library, Model, Simulation och Results.

Huvudfunktioner Arbetet i DEROB-LTH är grupperat i sju huvudfunktioner: File, Project, Case, Library, Model, Simulation och Results. DEROB-LTH Bakgrund DEROB-LTH, som är en förkortning för Dynamic Energy Response of Buildings, kommer ursprungligen från University of Texas och enbart skrivet på engelska. Programutvecklingen, som är knuten

Läs mer

Datorgrafik Ray tracing. Mattias Ekström, Västerås,

Datorgrafik Ray tracing. Mattias Ekström, Västerås, Datorgrafik Ray tracing Mattias Ekström, Västerås, 2010-03-05 1 SAMMANFATTNING Ray tracing är en teknik för att skapa bilder digitalt. Den används komersiellt främst inom film- och spelindustrin. Metoden

Läs mer

Föreläsning 7. Träd och binära sökträd

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och

Läs mer

Visualisering och ritningsframställning

Visualisering och ritningsframställning Visualisering och ritningsframställning Processbeskrivning Case: Studenthemmet Undervisningsmaterialet är utvecklat med stöd av Byggrådet Introduktion Manuellt framställda ritningar, illustrationer och

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

Sida Kapitel 11 Vektorfil och linjeskymning... 3

Sida Kapitel 11 Vektorfil och linjeskymning... 3 DDS-CAD Arkitekt 10 Vektorfil och linjeskyming Kapitel 11 1 Innehå ehåll Sida Kapitel 11 Vektorfil och linjeskymning... 3 Verktygsset för lagring från modellen... 3 Automatisk generering av vektorfiler...

Läs mer

Abstrakta datatyper Laboration 2 GruDat, DD1344

Abstrakta datatyper Laboration 2 GruDat, DD1344 Abstrakta datatyper Laboration 2 GruDat, DD1344 Örjan Ekeberg (fritt från en idé av Henrik Eriksson) 27 oktober 2008 Målsättning Målet med denna laboration är att ge en inblick i hur man kan använda abstrakta

Läs mer

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1 Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens

Läs mer

Dugga Datastrukturer (DAT036)

Dugga Datastrukturer (DAT036) Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre

Läs mer

HAND TRACKING MED DJUPKAMERA

HAND TRACKING MED DJUPKAMERA HAND TRACKING MED DJUPKAMERA ETT PROJEKT I TNM090 - SOFTWARE ENGINEERING Rasmus KARLSSON Per JOHANSSON Erik HAMMARLUND raska293@student.liu.se perjo020@student.liu.se eriha891@student.liu.se 2014-01-14

Läs mer

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap PROCEDUELL TERRÄNG Proceduella metoder för bilder (TNM084) Jimmy Liikala (jimli570@student.liu.se) Institutionen för teknik och naturvetenskap Sammanfattning Rapporten beskriver hur en proceduell terräng

Läs mer

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004 MinMax Algoritmen Implementation och optimering Joakim Östlund 15 juni 2004 1 Samanfattning MinMax är en algoritm som kan användas i turbaserade spel för att skapa en virituell motståndare. Algoritmen

Läs mer

Vektorkartor för mobila terminaler

Vektorkartor för mobila terminaler Vektorkartor för mobila terminaler Magnus Janlert 3 juni 2004 Introduktion Externt examensarbete, utfört VT2003 Visualiseringscentrum, c:a tio anställda, en del av Lantmäteriet Handledare: Jerry Eriksson

Läs mer

Kv. Ogräset. Martin Stenmarck, janst942@student.liu.se

Kv. Ogräset. Martin Stenmarck, janst942@student.liu.se Kv. Ogräset Martin Stenmarck, janst942@student.liu.se Fig 1. Kv. Ogräset. Bakgrund Kvarteret Ogräset är en samling av tre bostadsrättshus i Gottfridsberg, Linköping. Dessa tre hus håller på att byggas

Läs mer

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA CDC6600 - en jämförelse mellan superskalära processorer av: Marcus Karlsson Sammanfattning I denna rapport visas konkret information om hur den första superskalära processorn såg ut och hur den använde

Läs mer

Introduktion till Matlab

Introduktion till Matlab Introduktion till Matlab Inledande matematik, I1, ht10 1 Inledning Detta är en koncis beskrivning av de viktigaste delarna av Matlab. Till en början är det enkla beräkningar och grafik som intresserar

Läs mer

Om plana och planära grafer

Om plana och planära grafer KTH Matematik Bengt Ek April 2006 Material till kursen 5B1118 Diskret matematik för CL3: Om plana och planära grafer I många sammanhang (t.ex. vid konstruktion av elektriska kretsar) är det intressant

Läs mer

Facit Tentamen TDDC (7)

Facit Tentamen TDDC (7) Facit Tentamen TDDC30 2014-03-18 1 (7) Teoretisk del 1. (3p) "Snabba frågor" a) Varför kan man tänkas vilja dölja metoder och variabler med private? (0.5p) Svar:För att skydda interna variabler från ändringar

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Trädstrukturer och grafer

Trädstrukturer och grafer Översikt Trädstrukturer och grafer Trädstrukturer Grundbegrepp Binära träd Sökning i träd Grafer Sökning i grafer Programmering tillämpningar och datastrukturer Varför olika datastrukturer? Olika datastrukturer

Läs mer

Lektion 2: Sökagenter. Robin Keskisärkkä

Lektion 2: Sökagenter. Robin Keskisärkkä Lektion 2: Sökagenter Robin Keskisärkkä Lektionens innehåll Introduktion till laboration 2 Implementation av en sökalgoritm Livekodning Konfrontera ett liknande problem själva Extra: Heuristisk sökning

Läs mer

Nonogram

Nonogram Nonogram. Vad är nonogram? Nonogram är små enkla men fascinerande pyssel som ursprungligen kommer från Japan. De har också givits ut i söndagsbilagan i engelska dagstidningar under flera år. Idén bakom

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 22 december 2006 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,

Läs mer

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar

Läs mer

Tentamen Datastrukturer D DAT 036/INN960

Tentamen Datastrukturer D DAT 036/INN960 Tentamen Datastrukturer D DAT 036/INN960 18 december 2009 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. Betygsgränser, CTH: 3 = 24 p, 4 = 36 p, 5 = 48 p, GU:

Läs mer

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Informationsinfrastruktur 7.5 hp Mattias Nordlindh Inledning Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Dokumentet består av

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum och tid för tentamen: 2017-01-11, 14:00 18:00. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 15:00 och ca 17:00. Godkända

Läs mer

Utveckling av ett grafiskt användargränssnitt

Utveckling av ett grafiskt användargränssnitt Datavetenskap Opponenter: Daniel Melani och Therese Axelsson Respondenter: Christoffer Karlsson och Jonas Östlund Utveckling av ett grafiskt användargränssnitt Oppositionsrapport, C-nivå 2010-06-08 1 Sammanfattat

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.

Läs mer

Using SharePoint Workflow

Using SharePoint Workflow Datavetenskap Opponent(er): Anders Olsson Marcus Karlsson Respondent(er): Harald Quist Creating a Help Desk Using SharePoint Workflow Oppositionsrapport, C-nivå 2009:xx 1 Sammanfattat omdöme av examensarbetet

Läs mer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! 1 (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi

Läs mer

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm? Föreläsning 1. Introduktion och sökning i graf Vad är en algoritm? Först: Vad är ett problem? Består av indata och ett mål. Indata: [En beskrivning av en struktur.] Mål: [Kan vara Ja/Nej, ett tal eller

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken får ha anteckningar,

Läs mer

Grafik raytracing. Mattias Axblom.

Grafik raytracing. Mattias Axblom. Grafik raytracing Mattias Axblom mam11003@student.mdh.se 1 SAMMANFATTNING Raytracing, strålföljning eller strålspårning är en metod för att rendera realistiska bilder, film och i framtiden spel. Grundidén

Läs mer

Robin Wahlstedt Datavetenskap / Spel Vetenskapsmetodik rwt07001@student.mdh.se. Datorgrafik i spel

Robin Wahlstedt Datavetenskap / Spel Vetenskapsmetodik rwt07001@student.mdh.se. Datorgrafik i spel Robin Wahlstedt Datavetenskap / Spel Vetenskapsmetodik rwt07001@student.mdh.se Datorgrafik i spel 1 Sammanfattning Dator grafik kan delas in i fyra olika områden: information, design, simuleringar och

Läs mer

En förladdare fångar användarens uppmärksamhet under tiden huvudfilmen laddas. Använd din kreativitet när du formger en förladdare och använd sedan

En förladdare fångar användarens uppmärksamhet under tiden huvudfilmen laddas. Använd din kreativitet när du formger en förladdare och använd sedan En förladdare fångar användarens uppmärksamhet under tiden huvudfilmen laddas. Använd din kreativitet när du formger en förladdare och använd sedan ActionScript för att sätta den i arbete. 10 Ladda och

Läs mer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1 Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 1 OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer.

Läs mer

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab TANA17 Matematiska beräkningar med Matlab Laboration 1. Linjär Algebra och Avbildningar Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion I denna övning skall

Läs mer

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Procedurell grottgenerator och eld i GLSL. Marcus Widegren Procedurell grottgenerator och eld i GLSL Marcus Widegren 14 januari 2012 Innehåll 2 Sammanfattning Jag har gjort en enkel procedurell grottgenerator i GLSL och C++. För belysning används en fackla, som

Läs mer

1 Kravspecifikation Snake App

1 Kravspecifikation Snake App Kravspecifikation Snake App - Kravspecifikation Snake App Utskriven/PDF Export: 2011-09-07 Copyright 2011 Sidan 1 av 7 1 Kravspecifikation Snake App 1.1 Vad är Snake App? Vi skall gör ett Snake Spel för

Läs mer

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I Vt 2002 Mål: Lära sig: Filhantering Stränghantering Vektorer Funktioner Programstruktur Tid: Läroboken: 6 timmars handledd laborationstid. Beräknad klar

Läs mer

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm

Läs mer

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1 Inlämningsuppgift : Finn 2D1418 Språkteknologi Christoffer Sabel E-post: csabel@kth.se 1 1. Inledning...3 2. Teori...3 2.1 Termdokumentmatrisen...3 2.2 Finn...4 3. Implementation...4 3.1 Databasen...4

Läs mer

Tillämpad Programmering (ID1218) :00-13:00

Tillämpad Programmering (ID1218) :00-13:00 ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016 Objektorienterad Programkonstruktion Föreläsning 9 30 nov 2016 Collections Ett samlingsnamn på objekt som innehåller en samling av andra objekt Det finns många olika sorters Collections, t.ex listor, träd,

Läs mer

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna

Läs mer

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna

Läs mer

Mätningar med avancerade metoder

Mätningar med avancerade metoder Svante Granqvist 2008-11-12 13:41 Laboration i DT2420/DT242V Högtalarkonstruktion Mätningar på högtalare med avancerade metoder Med datorerna och signalprocessningens intåg har det utvecklats nya effektivare

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet (fylls i av ansvarig) Datum för tentamen Sal Tid Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter i tentamen Antal sidor på

Läs mer

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation Innehåll Föreläsning 11 Trie Sökträd Trie och Sökträd 356 357 Trie Ytterligare en variant av träd. Vi har tidigare sett: Oordnat träd där barnen till en nod bildar en mängd Ordnat träd där barnen till

Läs mer