XNA3DGameEngine Bilag BILAG. Side 1/79

Størrelse: px
Starte visningen fra side:

Download "XNA3DGameEngine Bilag BILAG. Side 1/79"

Transkript

1 BILAG Side 1/79

2 Table of Contents 1 Projektplan / dagbog XNA XNA Game Studio Express XNA Game Studio Proffesional Lagene i XNA Platformen Core framework Extended framework Applikations modellen Content pipeline en Games Overordnet design Test resultater og udsnit af kode Kald uden at gemme Kald uden at gemme Ekstra test Kald hvor data gemmes Besked system Collision Detection Konstruktion Test og Resultater Static Dynamic Konklusion Splitting - Verifikation Simple-Render BSP-Tree-Render Oct-Tree-Render Rendering Lavt antal Polygoner OctTreeRender BSPTreeRender PortalRender PortalRender og OctTreeRender PortalRender og BSPTreeRender Højt antal Polygoner SimpleRender OctTreeRender BSPTreeRender PortalRender PortalRender og OctTreeRender PortalRender og BSPTreeRender MultiThreading Enkelt Trådet design Engine-tråd og Render-tråd To trådet Collision ingen Rendering...61 Side 2/79

3 7.4 To trådet Collision m. to trådet Portal ingen Rendering M. to tråde pr. SceneNode ingen Rendering To tråde pr. SceneNode, forbederet ingen Rendering To tråde pr. SceneNode, hvor de ikke køre ingen Rendering En EngineX tråd, en RenderX tråd To tråde for Collsion og to for Portal To tråde pr. SceneNode To tråde pr. SceneNode, forbederet To tråde pr. SceneNode, hvor de ikke køre DGameEngine-testmiljøets klasser Litteraturliste Side 3/79

4 1 Projektplan / dagbog sep 26 ID okt 26 nov 26 dec 26 jan 27 feb 27 Task Name Finde informationer 2 Teori 3 Rapport skrivning 4 Overordnet design 5 XNA - Teori 6 XNA Praktisk viden 7 Kode Opstart og små tests 8 Kode Enginen 9 Kode Loaders (.3DS og.x) Kode Debug Renders 11 Kode Besked System 12 Modelere Modeller i 3DS Max 13 Kode Simple Renderen 14 BSP-Trees Renderes 15 OCT-Trees Renderes 16 Portal Renderen 17 AI Modul 18 Redesign af Portal 19 Kombination af Renderes 2 Kollisions modul 21 Debug render udvidelse 22 Trådning 23 Uddybende tests Side 4/79

5 2 XNA XNA frameworket er udviklet af Microsoft, med henblik på at få et helt managed udviklingsmiljø, der samtidig understøtter mulighed for udvikling af spil til både PC og Xbox36 samtidigt. Det har efterhånden taget Microsoft et godt stykke tid at udvikle frameworket, siden de første gang talte om XNA til Game Developer Conference i 24[XNA_BLOG]. Men i august 26 kom den første release, en beta1 udgave af XNA Game Studio Express(GSE), som er et udviklingskomponent til Visual C# Express. Senere i 26 kom også en beta2, før Microsoft i december 26 udgav en release candidate 1.. Testmiljøet i dette projekt er bygget på beta1 releasen af XNA GSE. Grunden til dette er, at Beta1 blev udgivet på samme tidspunkt, som vi startede projektet. Hvorfor vi ikke har skifter undervej er fordi, Microsoft har lavet grundlæggende ændringer fra beta1 og til de senere releases, hvilket villet krævet større ændringer af vores test miljø, hvilket så resulterer i, at vores tidligere tests ikke kan sammenlignes med de senere. 2.1 XNA Game Studio Express XNA GSE er den første udgave af XNA, og er den version som vi baserer vores test miljø på. XNA GSE er udviklet med henblik på hobbister, studerende og små spiludviklingsfirmaer. De små spilfirmaer kan bruge GSE til at udvikle PC spil. Hvis de vil udgive spil på XBox36 skal de bruge Game Studio proffesional(gsp). For studerende og hobbyisters vedkommende kan de både udvikle til PC og XBox36, da det her er udviklingen af spil der er målet, og ikke at udgive dem. For at udvikle spil til XBox36 skal man være medlem af XNA Creaters Club [ XNA_VERS], hvilket giver mulighed for at overføre spil til sin Xbox36 gennem XBox Live. Med XNA GSE har man adgang til både XNA frameworket og content pipelinen (dog kun XNA frameworket i Beta1), hvilket er to komponenter som Microsoft udtaler simplificerer spiludvikling [XNA_BLOG]. 2.2 XNA Game Studio Proffesional XNA GSP er en videreudvikling af XNA GSE, som udkommer på et tidspunkt i 27. Denne version af XNA har fokus på store spilfirmaer og vil komme til at indholde de samme features som Side 5/79

6 XNA GSE. Derudover indeholder den også nogle nye værktøjer til at kunne gøre spiludvikling nemmere for større hold af udviklere både grafikere og designere. XNA GSP vil også indeholde mulighed for at udvikle spil til Xbox36, med henblik på udgivelse. Nogle af de ekstra værktøjer, der følger med i denne version, er til at håndtere content-management, som i stigende grad er med til at øge kompleksiteten af spilprojekter. Det er Microsofts hensigt i større grad at lade modlers, designere o.lign. inkludere data direkte i miljøet, for at nedsætte muligheden for at compile spil med gammel eller ubrugbar data. Denne version har vi af naturlige årsager ikke kunnet prøve i praksis, så derfor vil vi fokusere mere på XNA frameworket og hvilke muligheder det har, da det ligger til grund for begge versionerne. 2.3 Lagene i XNA I dette afsnit beskriver vi hvilke lag og komponenter som er med i XNA. Det gør vi for, at vi bedre kan adskille, hvornår vi arbejder med ting, som påvirker begge versioner af XNA Game Studio, og hvornår tingene kan være forskellige fra version til version Platformen Platformen er det nederste lag i XNA hierarkiet, og er den del som selve XNA frameworket er bygget på. Koden der findes her, bygges oven på en del low-level platform specifik api er foruden Direct3D, XACT, Xinput og Xcontent. Disse komponenter og api er er unmanaged, og det er disse ting som Microsoft pakker ind i managed code, og simplificere for brugerene i de højere lag Core framework Core framework et er den nederste del af det samlede framework. Det er her unmanaged kode og platform specifikke kald bliver pakket ind, så det kan bruges som managed code for de højere lag. Adgangen til det nedre lag bliver grupperet, så funktionalitet som grafik, lyd og lignende bliver samlet i hver deres område, og kan dermed præsenteres fornuftigere til det ovenstående lag. Det er også her at Managede DirectX kommer på, for at give de ovenstående lag en managed platform at arbejde på. Microsoft har på dette lag også implementeret et matematik bibliotek, der indgår som en brugbar komponent for de øvre lag. Side 6/79

7 2.3.3 Extended framework Extended framework laget er udviklet for at indkapsle noget af funktionaliteten i core frameworket, og dermed simplifisere det for brugerene af frameworket. Det er her man finder applikationsmodellen og content pipelinen, der kan bruges til at sætte et spilmiljø op relativt hurtigt Applikations modellen Applikationsmodellen er den komponent i XNA der simplificerer spildesignet ved at have nogle prefabrikerede komponenter, som spillets kode kan arve fra. På denne måde kan man blandt andet arve fra en tegne -komponent, der får kaldt nogle predefinerede metoder, der giver mulighed for at eksekvere kode før, imens og efter, der bliver sendt informationer til grafikkortet. Andre komponenter i applikationsmodellen giver mulighed for at implementere funktionsorienterede komponenter, der kan indeholde updatede funktioner, som kaldes før en eventuel renderkomponent Content pipeline en Content pipelinen er en komponent i det extended framework, der håndterer indlæsning/inkludering af data som modeller, texturer, lyde/musik og shader programmer/effekter. Content pipelinen dækker primært unmanaged resourcer, og præsenterer dem for det spil der udvikles på en managed måde. Dette har tidligere været et problem, da kontrollen af disse ressourcer tidligere har været helt unmanaged eller liggende i små wrapper objecter til hver ting, hvilket har givet mange problemer med hvornår ting skal fjernes som ressource. Et eksempel kunne være en model, der skal unloades, skal alle dens texturer og shaders også fjernes?, eller deles de af flere modeller?. Det er dette problem microsoft forsøger at løse med Content pipelinen. Illustration 1:XNA Content Pipeline [XNA_BLOG] På Illustration 1 ses et overblik over Content pipelinen, den viser den samlede processering af data ressourcer, og hvordan data'ene bliver vist ensartet over for brugeren og content manageren. Side 7/79

8 Content pipelinen virker ved at der instantieres en content manager, der bruger content pipelinen til at loade data af typerne, som tidligere er beskrevet ind i system. Ved at bruge content manageren til at holde styr på modeller, texturer og lignendende, kan modellerne endda dele ressourcer såsom texture og shaders i hver content manager. Hvis der er flere modeller i hver deres content manager, der bruger samme texturer vil texturen loades to gange[hargreaves]. Når modellerne ikke skal bruges mere kaldes unload på manageren, og dermed unloades alle de ressourcer, som manageren har loaded [HARGREAVES] Games På Games-laget finder man selve spillogikken, det er her Microsofts mål om simplificering begynder at tage form, da man slipper for at tage sig af mange overvejelser og hardwarenær bekymringer. Man bygger oven på de lag, som tidligere er beskrevet og kan dermed fokusere mere på design og funktionalitet. 3 Overordnet design 3.1 Test resultater og udsnit af kode Kald uden at gemme Data er følgende int 2. 5 int's 3. 5 int's og 5 strings 4. 5 int's, 5 strings og 1 Vector int's, 5 strings og 5 Vector3 Eksempel på kode * Besked kald * public void TestLoopA() private MessageA ma = new MessageA(1); int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(ma); * Funktions kald * public void TestLoopA() private int i1 = 1; int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(ia); Side 8/79

9 System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse public void retrivemessage(messagea message) System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse public void retrivemessage(int intvar) FunktionsTest MessageTest Test 1 Test 2 Test 3 Test 4 Test 5 Test 1 Test 2 Test 3 Test 4 Test 5,148,125,187,1393,2627,146,125,147,125,147,125,125,187,1393,265,125,125,125,125,125,125,125,187,1385,2615,125,125,125,125,125,125,125,187,1382,2616,125,125,125,125,125,125,13,187,1383,2633,125,125,125,125,129,125,127,187,1382,2616,125,125,125,125,125,125,125,187,1394,2614,125,125,125,125,126,129,125,187,1397,2618,126,125,125,125,125,125,125,187,1383,2615,125,125,126,125,125,125,125,187,1382,2614,125,125,125,125,125,125,125,187,1382,2652,125,138,125,126,125,125,125,187,1382,2615,125,125,125,126,125,125,138,187,1382,2617,126,125,125,125,125,125,125,187,1382,2623,125,125,125,127,125,125,125,187,1393,2641,126,125,125,125,125,125,125,187,1431,2616,125,125,126,125,125,125,127,187,1383,2624,125,125,125,125,125,125,14,187,1384,2652,125,125,125,125,127,125,125,187,1383,2613,125,125,125,125,126,125,125,187,1382,2629,125,125,125,125,125,126,125,187,1383,2616,125,125,125,125,125,125,125,187,1382,2614,125,125,125,125,125,125,125,187,1383,2616,125,126,125,125,125,125,125,187,1396,2617,125,127,126,126,125,125,125,196,1384,2641,125,125,125,125,125,125,125,192,1383,2637,13,125,126,128,125,125,125,187,1382,2637,126,125,125,125,125,125,125,187,1384,2614,128,125,125,125,125,125,125,187,1382,2638,125,125,125,125,125,125,127,187,1383,2622,125,125,125,125,125,125,125,187,1382,262,125,126,125,125,128,125,125,187,1385,265,125,125,126,125,125,127,125,189,1383,2629,125,125,125,125,125,125,125,187,1382,2652,125,125,135,125,125,125,125,187,1388,2639,125,125,125,125,125,125,125,187,1382,2615,125,125,126,125,125,125,125,187,1382,2618,126,125,125,125,125,125,125,187,1382,2614,125,125,128,125,125,125,125,187,1386,2615,127,125,126,125,125,125,125,187,1384,2618,127,125,125,125,125,125,125,24,1382,2639,125,125,125,125,125 Side 9/79

10 3.1.2 Kald uden at gemme Ekstra test Data er følgende Matrice 2. 1 BoundingSphere 3. 1 Vector Vector3 Eksempel på kode * Besked kald * public void TestLoopA() private MessageA ma = new MessageA(new Matrix(1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f)); while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(ma); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse public void retrivemessage(messagea message) * Funktions kald * public void TestLoopA() private Matrix mat1 = new Matrix(1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f); int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(mat1); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse public void retrivemessage(matrix mat) Side 1/79

11 FunktionsTest MessageTest Test 1 Test 2 Test 3 Test 4 Test 1 Test 2 Test 3 Test 4,1877,644,566,197,147,125,148,125,1843,65,56,112,129,125,125,125,1838,638,56,192,125,125,131,125,1839,638,562,196,125,126,125,125,1843,631,56,189,125,128,125,125,1875,592,56,189,125,125,126,125,1837,638,56,189,125,125,125,125,1837,592,56,19,125,125,126,125,1837,592,562,189,125,125,126,129,1837,627,56,189,127,136,125,125,1839,638,56,189,125,129,125,126,1839,631,572,19,125,125,126,125,1954,638,56,189,125,125,126,125,1841,638,56,112,125,125,126,125,1838,62,589,19,129,125,126,125,1847,638,564,189,125,126,129,125,1843,622,562,19,125,125,125,125,1837,638,56,19,125,125,125,125,1838,638,56,1113,125,125,125,125,1837,596,56,189,125,125,125,125,1837,638,56,191,125,125,125,125,1837,619,56,189,127,125,125,125,1847,592,562,189,125,125,125,125,1839,592,56,191,128,129,126,127,1841,61,56,189,125,125,125,125,1845,638,56,191,125,125,125,125,1839,64,56,189,125,125,125,125,1839,592,56,19,128,127,128,125,1839,651,563,189,125,125,127,125,1838,638,56,189,125,126,126,125,1839,592,561,189,125,125,125,125,1839,636,56,19,125,125,126,125,1839,638,56,189,125,125,125,125,1836,592,56,192,165,125,125,125,1839,69,56,189,125,125,126,125,1837,591,56,191,125,125,125,125,1836,641,561,189,125,127,126,126,1837,638,56,189,125,125,125,125,1836,638,56,19,125,125,126,125,1996,649,56,189,129,125,125,125,1837,638,56,191,125,125,125, Kald hvor data gemmes Data er følgende int 2. 5 int's 3. 5 int's og 5 strings 4. 5 int's, 5 strings og 1 Vector int's, 5 strings og 5 Vector3 Eksempel på kode Side 11/79

12 * Besked kald gemme besked * public void TestLoopA() private MessageA ma = new MessageA(1); int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(ma); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse MessageA ma; public void retrivemessage(messagea message) ma = message; * Funktions kald gemme variable* public void TestLoopA() private int i1 = 1; int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(ia); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse private int testint = ; public void retrivemessage(int i) testint = i; * Besked kald - gemme variable* public void TestLoopA() private MessageA ma = new MessageA(1); int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) mr.retrivemessage(ma); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i en anden klasse private int testint = ; public void retrivemessage(messagea message) testint = message.testvalue1; Side 12/79

13 FunktionsTest MessageTest_ message gemmes Test 1 Test 2 Test 3 Test 4 Test 5 Test 1 Test 2 Test 3 Test 4 Test 5,29,628,328,4263,6559,1194,499,51,498,498,187,562,3274,4234,6523,779,498,498,498,499,187,56,3244,4232,6555,56,498,498,5,498,187,564,3243,5142,6599,569,498,52,498,498,187,561,326,4232,6522,56,498,498,498,5,187,56,3241,4235,6497,564,498,498,498,498,188,564,3239,4233,6542,562,498,527,499,498,187,56,329,4231,6528,56,59,498,498,498,187,56,3258,5147,6514,661,498,498,499,498,187,563,3242,4234,6622,56,498,499,498,498,187,56,3241,4233,648,56,498,498,498,499,187,623,3242,4234,731,561,498,498,498,498,187,562,3242,4237,6558,56,498,498,498,498,194,575,3239,5353,648,56,499,498,498,498,188,564,3244,4236,6513,563,498,498,51,498,187,56,347,425,6522,56,498,499,498,498,189,56,3242,4233,665,56,498,498,498,499,187,562,3243,4233,6514,56,498,498,498,498,189,56,324,4234,6525,56,498,498,498,498,187,56,3237,4236,6527,562,57,498,498,498,187,589,3236,4288,726,561,498,498,5,498,188,56,3252,4266,661,56,498,514,498,498,187,56,3238,4233,6554,561,498,498,498,498,187,562,3236,4391,6525,56,498,498,531,498,187,56,3249,4235,6522,56,498,499,498,498,192,56,324,4233,655,56,499,498,498,498,187,586,3236,4247,725,56,498,498,498,51,187,56,3239,4234,663,56,498,498,498,498,187,562,3254,4233,6519,561,498,498,498,498,189,562,3237,4234,6556,56,498,498,52,498,187,56,3237,4233,6541,562,498,499,498,498,187,563,3237,4236,6551,56,499,498,498,498,187,562,3236,4231,6493,572,498,498,498,499,191,56,3238,4249,7333,56,498,498,51,498,187,562,3245,4235,6476,56,498,498,498,498,187,562,3249,5173,6496,56,498,498,498,498,187,569,324,4234,6517,564,498,498,499,498,187,56,3237,4238,6574,56,499,498,5,498,187,624,3281,4235,6552,56,498,498,498,51,187,6,3238,4234,651,562,498,498,498,498,187,56,3238,429,6519,56,498,499,498,498 Side 13/79

14 MessageTest_ variabler gemmes Test 1 Test 2 Test 3 Test 4 Test 5,312,698,2387,2923,4538,281,686,2366,2869,4551,28,685,2366,2865,4517,285,711,2366,2864,4518,28,685,2369,2884,4546,28,687,2365,2913,4517,281,685,2367,2881,4566,28,685,2366,2864,4511,28,695,2366,2865,4522,28,685,241,2868,4515,28,689,2367,2866,4513,283,685,2365,2882,4539,281,685,2367,289,4518,28,685,2366,2873,466,28,685,2367,2867,4517,28,688,2365,2865,4515,28,685,237,2868,4615,283,687,2365,2867,458,28,685,2365,288,4497,28,687,2369,2882,4517,28,685,2365,2895,4518,28,685,2367,2884,4567,28,685,2365,2885,4487,281,685,2366,2863,4544,28,685,2365,2878,449,28,685,2388,2923,456,28,685,2366,2866,4521,28,685,2365,3488,4487,282,685,2365,2899,4539,282,685,2365,2884,4493,28,685,2367,2863,4595,28,685,2365,3559,4484,28,685,2365,2924,4516,28,685,2365,2866,4512,281,685,2366,2863,4517,291,687,2369,2865,468,28,685,2369,2882,4512,28,685,2367,2873,448,282,685,2366,2863,4514,281,685,2379,2886,4512,28,685,2365,2892, Besked system Data er følgende int 2. 5 int's 3. 5 int's og 5 strings 4. 5 int's, 5 strings og 1 Vector int's, 5 strings og 5 Vector3 Side 14/79

15 Eksempel på kode * Besked kald gemme besked * public void TestLoopA() private MessageA ma = new MessageA(1); int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) ms.addmessageandupdate(ma); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i besked system klassen private ArrayList messages = new ArrayList(); public void addmessageandupdate(messagea message) messages.add(message); switch (message.testvalue1) case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 1: mr.retrivemessage((messagea)messages[]); break; default: mr.retrivemessage((messagea)messages[]); break; messages.removeat(); // i en anden klasse MessageA ma; public void retrivemessage(messagea message) ma = message; * Besked kald gemme besked * public void TestLoopA() private MessageA ma = new MessageA(1); int rounds_tmp = rounds; while (rounds_tmp!= ) rounds_tmp--; _maintimer.reset(); for (int i = ; i < 1; i++) ms.addmessageandupdate(ma); System.Console.WriteLine("" + _maintimer.getelapsedtime()); // i besked system klassen public void addmessageandupdate(messagea message) switch (message.testvalue1) case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 1: mr.retrivemessage(message); break; default: mr.retrivemessage(message); break; // i en anden klasse MessageA ma; public void retrivemessage(messagea message) ma = message; Side 15/79

16 Besked system_med at gemme i array Besked system_med at gemme i klassen Test 1 Test 2 Test 3 Test 4 Test 5 Test 1 Test 2 Test 3 Test 4 Test 5,5538,5541,552,5523,5531,1113,117,118,179,116,5425,557,5476,5479,5479,162,111,999,158,996,5435,548,5481,5484,5481,158,998,998,158,997,5443,5497,5482,5477,552,16,998,998,158,996,542,548,5612,5479,5481,161,1,998,161,996,5419,5481,5638,5491,5476,158,996,998,158,996,5423,5481,5478,5483,5481,188,999,996,161,998,5422,5477,5479,5481,548,185,996,996,158,996,5438,5479,5477,5523,5479,159,998,997,158,997,542,5519,5481,5482,5479,164,998,996,158,996,542,5481,5494,5488,5478,159,996,996,16,996,5418,548,548,5491,5479,161,998,996,158,996,5419,5476,5492,5481,5493,162,998,996,158,19,5423,5486,5577,5478,548,159,998,999,159,129,5455,5478,5478,5479,5488,161,999,996,158,997,5418,5492,5476,5477,5497,159,996,999,159,996,5419,5478,5492,548,5479,173,1,996,159,998,5417,553,5478,549,548,163,996,996,158,12,5417,5492,5481,5484,5476,16,13,996,159,996,5418,548,5479,548,5494,158,999,998,158,997,5431,5481,5488,5479,5479,16,997,996,159,996,5417,5492,5476,5478,5497,158,998,125,158,996,5448,5478,557,548,5496,161,996,997,159,996,5419,5478,5476,5491,5478,16,999,996,158,996,5417,5479,5484,5487,5481,158,1,997,158,996,5416,5483,548,5478,549,16,997,997,158,997,5429,5479,548,5514,5478,165,998,996,162,996,5417,557,5479,5479,5496,158,996,997,158,996,5415,5479,5496,5479,5479,161,998,996,159,997,5414,5481,5481,5496,5477,16,999,999,158,996,5418,5476,5479,5478,5479,159,996,996,158,997,5414,5489,5529,5481,551,16,999,996,158,1,5452,548,5478,5476,5481,16,996,996,16,996,5416,5492,5479,5482,5497,16,998,997,158,997,6254,5481,5492,5478,5478,161,12,996,159,996,5415,552,5486,548,5483,158,14,998,158,996,5448,5496,5479,5476,5489,162,998,998,158,123,5414,5478,5476,5482,5494,162,997,996,159,997,5464,548,5479,5478,5478,158,998,997,158,996,5414,5492,548,5493,5485,161,12,996,158,11,5451,5489,557,5476,5519,16,996,996,158,997 Side 16/79

17 4 Collision Detection Collision Detection og Control, har vi valgt som en af de moduler, vi mener er vigtig for vores 3DGameEngine. Grunden til dette er, at en 3DGameEngine som skal kunne understøtte et FPS spil, skal kunne fortælle og håndtere, når en spiller eller et andet 3D objekter støder ind i selve verdenen eller andre objekter. Den anden grunden er, at vi gerne vil bruge dette modul til at kunne give en god indikation omkring hvordan andre komponenter vil komme til at reagere med de teknikker, vi har tænkt os vil kunne give en performance forbedring. Vi finder disse komponenter typisk i den forstand, at ligesom AI, Physics, Lyd osv kan og er meget CPU tunge opgaver. Alle har det tilfælles at der er X-antal arbejdsopgaver, der skal løses som typisk er proportionel med antallet at enheder, som skal styres/beregnes, ligesom Collision Control har. X-antal bevægelige objekter skal kontrolleres op imod x-antal stationært geometri og evt. x-antal bevægeligt objekter. 4.1 Konstruktion For at vi får realistiske tests så bliver vores Collision Detection / Control nødt til at være så tæt på det vi ser i kommercielle 3DGameEngines. Her er det vigtigste at vores Collision Detection har samme hastighed som de kommercielle Engines, i hvert fald set asymptotisk. Vi vil aldrig kunne ramme den samme hastighed af den simple årsag, at der findes mange nuancer på, hvordan den Collision Detection kan laves. Men ifølge litteraturen så findes der en fælles asymptotisk hastighed. Grunden til, at der findes en fælles asymptotisk hastighed, er, hvis vi ser på problemet med at finde ud af om to objekter optager fælles sted i et dertil hørende tid. Dvs. to objekter bevæger sig og i en given tid støder de sammen. Der hvis vi tager det første problem, optager det samme sted. Dvs. har det ene objekt geometri som skærer det andets geometri? Hvis vi simplicerer dette problem til, at en kugle støder ind i noget geometri (objekt). Der findes, hvis vi er lidt firkantede, to måder at finde ud af dette. Denne ene er brute force teste alle polygonerne op i mod kuglen og finde dem som skærer denne, hvis vi antager, at det er en boundingsphere der skal testes op imod et objektet med 2millioner polygoner. Denne naive algoritme tester alle polygoner i objektet for at se, om der er en kollision, dvs.: 2 16 tests dvs. running time er : (#polygons)= n Skal udføres inden man kan se om der er en kollision eller ej, dette bliver endnu værre, hvis det er et Side 17/79

18 helt objekt, der kolliderer med objektet, f.eks. et objekt på 1polygoner: =2 19 tests dvs. running time er : (#polygons1 * #polygon2)= n m n2 Begge af disse asymptotiske running time's er helt udelukket i et real tid sceneri, som et 3D First Person Shooter er. Selvom vi siger at en 1GHz processor er i stand til at udføre 1 test per clock cycle, vil det stadigvæk betyde, at den vil bruge 2 sekunder for at gennemfører den sidste test. Det er næsten unødvendigt at sige, at det ikke er denne metode, som bliver brugt. Den hurtigste måde vi kan finde ud af, om en kugle deler plads med et objekt er ved at have sorteret objektets geometri på en sådan måde, at vi hurtigt kan bestemme hvilke dele af geometrien, der ikke er interessant, og hvilke der er. En sådan måde kan være et binært søgetræ som har den egenskab at være asymptotisk meget hurtigt log n [CORMEN] for en søgning. Objekt Binært søge træ Objekt Del objekt 1 Del objekt 2 Del objekt Del objekt Del objekt Del objekt Illustration 2: Collision Detection, Binært søge træ Ideen er som vist på Illustration 17: Collision mellem dynamske og statiske objekter - Normale er, at et objekt bliver delt op i mindre og mindre dele eftersom man går ned igennem træet. Dvs. man kan meget hurtigt bestemme, om der er en kollision mellem to objekter ved at teste på root-nodens boundingsphere, hvis der er en kollision her, vil man fortsætte ned igennem træet, indtil der ingen kollision mellem en underliggende boudningsphere er, eller vi når bunden, hvorefter vi bliver nødt til at teste på den/de polygoner, der er tilknyttet den sidste node. For hver gang vi går ned igennem træet så halverer vi vores problem. Højden/dybden af vores Side 18/79

19 binært træ for objektet med de 2mill polygoner er: 2 16 polygoner=log højde Højde af binært træ er : O log 2 n hvis vi antager at leaf-noderne alle indeholder 1 og kun 1 polygon. Det vil betyde, at når algoritmen når bunden af træet, og der stadigvæk er kollision mellem den sub-boundingsphere i træet/noden og den kolliderende boundingsphere, at vi kun behøver at lave en intersecetion test mellem boundingsphere og en polygon for at teste, om der reelt findes en kollision. Alt i alt vil vi højest have udført 21 2=42 interscetion tests mellem boundingsphere og boundsphere (to for hvert level i træet) og kun en test mellem boudingsphere og polygon. Test mellem to boundingspheres er væsentlig hurtigere end boudingsphere og polygon, fordi to boudingspheres kun har en intersection hvis deres afstand mellem deres center er mindre en deres fælles radius. Mens BoudingSphere og polygon har en intersection hvis, det plan polygonen laver har en intersection med boundingsphere'en, og at polygons punkter ligge således at bare et at intersection punkterne for planet er inde i polygon. Start kollision test Første sub-sphere kollision test Objekt Objekt Coll. sphere Coll. sphere Anden sub-sphere kollision test Polygon & sphere kollision test Objekt Objekt Coll. sphere Coll. sphere Illustration 3: Kollision test mellem objekt og coll. sphere Hvis vi igen har kollision mellem to objekter, hvor det ene har 2mill polygoner og det andet har 1 polygoner, kan det gøres ved først at traversere det ene objekts kollision binær søgetræ, hvorefter det andet bliver traverseret med det førstes sidste sub-boundingsphere. Vi får derfor: 1 ' st obj : log =21 dvs. 42 tests 2 ' nd obj: log =1 dvs. 2 tests total antal tests=42 2=62 tests dvs. running time : O log 2 obj1 O log 2 obj2 = O log 2 obj1 obj2 Med andre ord en væsentlig forbedering af algoritmen. Vi er gået fra at have 2milliarder tests til kun Side 19/79

20 at have 62 tests for om to objekter har en kollision. Desuden skal det nævnes, at det er worst case running time for den sidste algoritme, vi viser. I langt de fleste tilfælde vil der ikke være nogen kollision, og derfor vil den returnere allerede efter første test mellem de to overordnede BoundingSpheres. Igen, hvis vi siger en 1GHz processor er i stand til at udføre en test per clock cycle, vil denne forbedrede Collision Detection være i stand til at udføre samme test, som den forrige gjorde på 1 sekund, på: 62 tests =.62 ms ticks / sec Hvilket er en 2ms/.62ms ~ 32 gange hurtigere (asymptotisk). Litteraturen fortæller os at den hurtigste måde vi kan lave en søgning via sammenligning er log n hvilket vi har nået. Dvs. umiddelbart kan den ikke gøres hurtigere. Dog findes der specielle tilfælde, f.eks. hvor de to objekter ikke har bevæget sig, hvor en caching af sidste resultat kan bruges, hvilket tager 1 tid. I vores algoritme hvis ingen af objekterne har bevæget sig, forsørgelsen ignoreret, da det antages at en evt. collision er blevet håndteret. Det samme gør sig gældende, når vi får tid ind i billedet. En 3DGameEngine og derfor også spillet er helt generelt, ikke en flydende kontinuert hændelse. For hver gang vi kører en update på 3DGameEngine'en så er der gået x-antal tid. Dvs. ligesom med film, så er hver frame i spillet en discret sampling af, hvordan verdenen ser ud på et givent tidspunkt. Hvilket fører til, at vi skal have en måde vi kan finde ud af, hvornår hændelser sker, så som collisioner mellem objekter i en kontinuert kontekst (se ). Start Objekt Slut Stationært objekt Objekt Illustration 4: Collision, bevægeligt obj over tid Igen har vi to måder en brute force, som vi allerede har set ikke virker, hvilket vil tage O n tid, hvor n er det interval vi sætter op mellem samplingerne (de røde cirkler). Side 2/79

21 Objekt Stationært objekt Objekt Illustration 5: Collision, bevægeligt obj over tid, "brute force" Mens en søgning som bygger på at halvere problemet for hver iteration vil tage O log n tid, hvor n er antallet af halveringer, se Illustration 21: Collision mellem dynamske og dynamiske & statiske objekter - Normal [ERICSON]. Start Objekt End Stationært objekt Objekt Illustration 6: Collision, bevægeligt obj over tid, Binær søgning Hvorfor vi er nødt til at lave denne overlap mellem disse BoundingSpheres? Kan ses i Illustration 23: Simple-Render & No rendering Low polygon. Her bliver en kollision mellem en kugle og et meget spidst objekt overset. Side 21/79

22 Objekt Objekt Illustration 7: Binær søgning fejl Ligesom andre 3DGameEngines skelner vi mellem stationært geometri og bevægelige objekter af den simple årsag, at hvis vi allerede ved, når vi indlæser modellerne ind, hvilke som ikke vil komme til at bevæge sig, kan vi allerede komme uden om at skulle teste disse op imod andre ikke bevægelige objekter, da disse aldrig vil kunne støde ind i hinanden. Et Collision Detection system er ikke specielt anvendeligt, hvis vi ikke brugte det til noget. Vi har derfor lavet to Collision Handlers, som bliver håndteret af Physics komponenter i vores Engine. Den ene handler er Bouncer-Handler som navnet antyder gør, at objekter kan reflektere af vægge, objekter osv. hvor den røde pil er retningsvectoren for objektet, mens den sorte pil er afstanden, det vil tilbagelægge mellem 2 efter hinanden følgende frames, den stiplede pil er den nye udregnede placering. Illustration 8: Bouncer-Handler Mens den anden er en Push'er-handler som vi bruger til, at vores kamera ikke kan gå igennem væggene, gulv osv. dvs. det vil f.eks. glide henover gulvet, hvis vi ramte ind i det. Illustration 9: Push'er-handler Side 22/79

23 Ideen er så, om vi kan forbedre denne model. Vi benytter allerede vores Collision Detection komponent til at bestemme, hvornår objekter bevæger sig igennem en portal. Det foregår ved det princip, at vi laver en Collision Ray, som i bund og grund er et linie stykke. I dette tilfælde som har startpunkt i den gamle position for objektet og slutpunkt i den nye position for objektet. Der sker så det, at hvis denne Collision Ray krydser en given portal, så ved vi, at objektet, som denne Ray hører til, har krydset den på gældende portal. Tanken er så, at denne portal graf også skal kunne bruges til Space Partitionering for vores Collision Detection komponent, frem for at skulle til at vedligeholde en ny SP-graf såsom et OctTree, for vi har allerede denne portal graf gratis i den forstand, at for at vores Portal-Render kan fungere korrekt, så skal den vedligeholdes for hver iteration, med alle de objekter som skal renderes Test og Resultater For at teste korrektheden og hvilken forbedering vores Portal-Graf kan have på vores Collision Detection, benytter vi vores verden fra før med de 6 rum. Vi generer x-antal objekter (spheres), som alle bevæger sig med samme hastighed, retningen bliver bestemt ud fra kameraets retning. Når de rammer andre objekter vil de blive reflekteret med uændret hastighed. Illustration 1: Verden delt ind i BSP-Tree Illustration 11: Kugler rammer verdenen Ovenover ses verderen, hvor vi for testens skyld tegner BSP-tree'et, som bliver brugt til søgningen for kollisioner. I Illustration 18: Collision mellem dynamske og statiske objekter - Portal ser vi nogle kugler, hvor nogen af dem rammer verdens geometri. For at kunne se hvilke dele af verden som bliver ramt, tegner vi BSP-Tree noderens boundingsphere, som ses som en wireframed sphere. Side 23/79

24 Illustration 12: Kugler i rum 6 Illustration 13: Kugler rammer verdenen Ovenover ses rum 6 med nogle kugler og til venstre ses BSP-Tree'et med de boundingsphere for noderne, hvor der sker en kollision. Illustration 14: Bounding Volumes Ovenover ses udelukkende objekternes boundingboxe og portalernes boundingspheres. De bevægelige objekter har linier for deres up-, right- op direction-vectors Static Vi starter med at teste, hvor objekterne udelukkende kan kollidere med den stationære geometri. Den første test er den normale, hvor vi ikke benytter nogen form for Space Partitionering. Mens i den anden test benytter vi portal-grafen til at bestemme, hvilke objekter og geometri kan kollidere med hinanden. Side 24/79

25 Normal - Static Portal - Static Illustration 15: Static Collision - Normal Illustration 16: Static Collision - Portal Den første blå søjle er reference, dvs. Frame Raten vi har ved kugler. De efterfølgende stiger antallet af kugler, 1, 2, 4, 8 og 16 kugler. Som det kan ses, så er vores portal graf næsten 1% hurtigere, end den test hvor vi ikke benytter nogen form for SP. Det skal også nævnes at i den normale test har vi fjernet portal grafen helt, således den ikke bliver opdateret, men vi får et mere realistisk resultat. Side 25/79

26 Collision Dection / Handling - Static - Normal ,5 5 7,5 1 12, ,5 2 22,5 25 Illustration 17: Collision mellem dynamske og statiske objekter - Normale Øverst = kugle, næste = 1 kugler, næsten igen = 2 kugler, osv nederst = 16 kugler Illustration 17: Collision mellem dynamske og statiske objekter - Normale ses Frame Rate'en for hele tests forløbet. Collision Dection / Handling - Static - Portal ,5 5 7,5 1 12, ,5 2 22,5 25 Illustration 18: Collision mellem dynamske og statiske objekter - Portal Side 26/79

27 Øverst = kugle, næste = 1 kugler, næsten igen = 2 kugler, osv nederst = 16 kugler Illustration 18: Collision mellem dynamske og statiske objekter - Portal ses Frame Rate'en for hele tests forløbet Dynamic I denne test kan kuglerne kolliderer med hinanden Normal - Dynamic Portal - Dynamic Illustration 19: Dynamisk Collision - Normal Illustration 2: Dynamisk Collision - Portal Igen er den første blå søjle reference, dvs. Frame Raten vi har ved kugler. I de efterfølgende stiger antallet af kugler, 1, 2, 4 og 8 kugler. Pga. at testen for om kuglerne støder ind i den dynamiske geometrien dvs. andre kugler stiger i orden af n2, ser vi en endnu større hastighedsforøgelse, når vi benytter os af Portal-Grafen til SP. Her er hastighedsforøgelse over 2% nogen steder. Side 27/79

28 Collision Dection / Handling - Dynamic - Normal ,5 5 7,5 1 12, ,5 2 22,5 25 Illustration 21: Collision mellem dynamske og dynamiske & statiske objekter - Normal Øverst = kugle, næste = 1 kugler, næsten igen = 2 kugler, osv nederst = 8 kugler Illustration 21: Collision mellem dynamske og dynamiske & statiske objekter - Normal ses Frame Rate'en for hele tests forløbet. Collision Dection / Handling - Dynamic - Portal ,5 5 7,5 1 12, ,5 2 22,5 25 Illustration 22: Collision mellem dynamske og dynamiske & statiske objekter - Portal Øverst = kugle, næste = 1 kugler, næsten igen = 2 kugler, osv nederst = 8 kugler Side 28/79

29 Illustration 22: Collision mellem dynamske og dynamiske & statiske objekter - Portal ses Frame Rate'en for hele tests forløbet. 4.2 Konklusion Det siger sig selv, at vi fremover vil benytte Portal-Grafen til Space Partitionering for både Collision Detection, men også hvis der skulle komme andre komponenter, som kan drage nytte af hurtigt at kunne bestemme relationer mellem objekter. Yderligere får vi Portal-Grafen gratis i den forstand, at Portal-Renderen skal bruge den og PortalRenderen er uden lige den hurtigste Render vi har, hvilket gør, at vi ikke kommer uden om PortalRenderen og derved Portal-Grafen. Vores løsning er i stand til at finde kollisioner mellem to objekter på O log n tid. Hvis en eller begge bevæger sig, er vi i stand til at finde kollisionspunktet på O log m log n hvor m er tiden hvor kollisionene finder sted og n er tiden, det tager at finde hvor i objektet kollisionen er. Dog skal det nævnes, at i langt de fleste tests for at finde kollisionspunktet for en given tid er kompleksiteten O log m 1. Da vi i de fleste tilfælde hurtigt kan se, at en kollision er mulig. Dvs. vi får typisk en søgning som total set tager O log m log n. Vores argument er, at det er den hurtigste måde at finde kollisioner på asymptotisk. Dvs. der findes metoder, som vil være i stand til at kunne gøre dette hurtigere, men ikke asymptotisk, det betyder at vores algoritme vil udvise samme hastighedskarakteristika som andre Collision Detection algoritmer, når vi tilføjer objekter til den [CORMEN] [ERICSON]. For at denne algoritme skal helt op og konkurrere med andre hurtigere algoritmer så burde vi som andre skifte fra BoundingSpheres (OBS) til ObjektOrienteretBoundingBox'e (OBB), da disse har mindre overlap mellem de enkelte noder og derved minimerer, at vi tester på noder, som kunne have været undgået [ERICSON]. Til vores test er denne algoritme mere end god nok. Testene med denne algoritme vil fortælle os korrekt, om de optimeringer, vi afprøver, i virkeligheden vil være en forbedring eller ej, da vores algoritme asymptotiske har samme hastighed som alle andre Collision Detection algoritmer, hvilket har været vores mål med denne. Yderligere mener vi, at denne algoritme eller rettere sagt komponent, vil være god nok til at simulere tilstedeværelsen af andre komponenter i vores Engine. Vi er i stand til at kunne ændre på, hvor meget den vil beregne per update (antallet af objekter der skal testes på). Side 29/79

30 5 Splitting - Verifikation Dette er ganske enkelt for at visuelt verificerer, at opdelingen er korrekt. Når selve testen kører er der ingen måde at være sikker på at vores algoritme er i stand til at udføre opdeling og kun tegne de dele, som kan ses. Derfor har vi lavet dette kapitel. Testen er udført således, at vi har 2 kameraer. Det ene er det vi ser igennem, det er statisk og overser hele geometrien. Det andet er bevægeligt, det er ud fra dette at vores algoritme bestemmer, hvad der kan ses. Vi tegner selve geometrien (selve objektet med texture) plus datastrukturen (Oct eller BSP), som blev brugt til at dele geometrien op med. Hver node i datastrukturen har fået tildelt sin egen farve, hvilket betyder, at en Wireframe geometri har forskellige farver (farvetildeling er tilfældigt, hvilket betyder at der kan forkomme noder som næsten har samme farve). Den lilla box er hele geometriens BoundingBox. Dybden af træet, der er vist, er sat til minimum 125 polygoner i hver node. 5.1 Simple-Render Simple-Render har i sig selv ikke nogen spændende datastruktur. Den bestemmer udelukkende på basis af objektets BoundingVolume, om det skal renders eller ej. Nedenunder ses det objekt, vi har testet med occucity fra Microsoft DirectX SDK. På første billede kan vi se objektet, da det befinder sig inden i ViewFrustum'et. Men på det andet kigger kameraet forbi objektet. Side 3/79

31 Som det kan ses, så virker den som den skal (Der er gennemført flere tests, hvor ekstremer i forhold til algoritmen også er blevet testet for korrekthed). 5.2 BSP-Tree-Render BSP - Split med geometrien Split med geometrien er den opdelingsmetode vi benytter med det for øje at benytte så meget af geometrien til at bestemme splitning planerne. Det betyder at splitting planerne stort set udelukkende bliver bestemt ud fra den allerede eksisterende geometri, hvilket er med til at minimere antal af polygon split, vi laver. Dog skal det nævnes at faktorer så som faktuelle splilts og tree-balance også spiller ind i bestemmelsen af splitting planer, men igen splitting planer kan du generere ud fra geometrien. Her kan hele geometrien ses, læg mærke til den lilla BoundingBox hvor siderne er synlige. Side 31/79

32 Her er halvdelen synlig, læg mærke til den lilla linie igennem midten af objektet gående vertikalt, hvilket igen er objektets BoundingBox. Som det kan ses, bliver der tegnet geometri, som delvist ikke kan ses pga. inddelingen. Husk på, at objektet skulle, hvis det var rigtigt, have være drejet med, således at kun halvdelen var synlig lige nu, og det ville have befundet sig i den venstre halvdel. Her er der endnu mindre af objektet, som befinder sig inden i kameraets ViewFustrum. Side 32/79

33 Her ses objektet, når vi har bevæget kameraet ned og til venstre. I det sidste billede er geometrien tegnet op i WireFrame inde i objectes BoundingBox. Billederne taler for sig selv, at opdelingen/splittingen og cullingen med ViewFustrum'et fungerer korrekt. Endvidere er det tydeligt at se, at pga., at opdelingen helst vil benytte sig af geometrien, vil opdelingen foregå langs strukturerne i objektet. I dette tilfælde er det bygningerne i objektet, således at vi får splitting planer som går ca. fra midten og langs med bygning indlingen og ud til kanten af objektet. Dette bevirker, at vi får nogle relativ lange sub-objekter ud af opdelingen. BSP - Bedste split Bedste split virker ved, at som udgangspunkt at vælge en vertex som center punkt for splitting planet, hvorefter vi regner ud, hvor mange split vi skal lave, og hvordan tree-balancen kommer til at se ud. Dette bliver gentaget nok gange, indtil vi har fundet et splitting plan som laver færrest split og balancerer træet bedst muligt. Side 33/79

34 Her kan hele geometrien ses, læg mærke til den lilla BoundingBox hvor siderne er synlige. Her er halvdelen synlig, læg mærke til den lilla linie igennem midten af objektet gående vertikalt, hvilket igen er objektets BoundingBox. Som det kan ses bliver der tegnet geometri som delvist ikke kan ses pga. inddelingen. Husk på at objektet skulle, hvis det var rigtigt, have være drejet med således at kun halvdelen var synlig lige nu og det ville have befundet sig i den venstre halvdel. Side 34/79

35 Her er der endnu mindre af objektet, som befinder sig inden i kameraets ViewFustrum. Her ses objektet når vi har bevæget kameratet ned og til venstre. I det sidste billede er geometrien tegnet op i WireFrame inde i objectes BoundingBox. Billederne taler for sig selv, at opdelingen/splittingen og cullingen med ViewFustrum'et fungere korrekt. Endvidere er det tydeligt at se, at denne opdelingsmetode generer sub-objekter som er væsentligt mere kompakte end split med geometrien gør. 5.3 Oct-Tree-Render Splitting Side 35/79

36 Her splitter Oct-Tree'et geometrien med Sub-noderens BoundingBox (de grønne kasser). Det skal give os sub-noder, som er helt kvadratiske. Hvilket kan ses tydeligt på efterfølgende illustrationer. Her kan hele geometrien ses, læg mærke til den lilla BoundingBox hvor siderne er synlige. Her er halvdelen synlig, læg mærke til den lilla linie igennem midten af objektet gående vertikalt, det er igen objektets BoundingBox. Som det kan ses bliver der tegnet geometri, som delvist ikke kan ses pga. inddelingen. Husk på, at objektet skulle, hvis det var rigtigt, have være drejet med, således at kun halvdelen var synlig lige nu, og det ville have befundet sig i den venstre halvdel. Side 36/79

37 Her er der endnu mindre af objektet, som befinder sig inden i kameraets ViewFustrum. Her ses objektet, når vi har bevæget kameraet ned og til venstre. I det sidste billede er geometrien tegnet op i WireFrame inde i objectes BoundingBox. Billederne taler for sig selv, at opdelingen/splittingen og cullingen med ViewFustrum'et fungerer korrekt. Non-splitting Vil ikke splitte geometrien. Geometrien vil derimod blive tildelt en node i forhold til, hvor mange procent af den pågældende polygon, der befinder sig inden i en given sub-node. Dvs. den sub-node med højest procenttal for en given polygon vinder den. Side 37/79

38 Her kan hele geometrien ses, læg mærke til den lilla BoundingBox, hvor siderne er synlige. Her er halvdelen synlig, læg mærke til den lilla linie igennem midten af objektet gående vertikalt, det er igen objektets BoundingBox. Som det kan ses, bliver der tegnet geometri, som delvist ikke kan ses pga. inddelingen. Husk på, at objektet skulle, hvis det var rigtigt, have være drejet med, således at kun halvdelen var synlig lige nu, og det ville have befundet sig i den venstre halvdel. Side 38/79

39 Her er der endnu mindre af objektet, som befinder sig inden i kameraets ViewFustrum. Her ses objektet, når vi har bevæget kameraet ned og til venstre. I det sidste billede er geometrien tegnet op i WireFrame inde i objectes BoundingBox. Billederne taler for sig selv, at opdelingen og cullingen med ViewFustrum'et fungerer korrekt. Og tildelingen af polygoner til de enkelte noder i OctTree'et fungerer korrekt, nu hvor ingen polygonsplitting finder sted. Side 39/79

40 6 Rendering I dette afsnit kommer testforløbene for de forskellige Renders vi har og kombinationerne mellem Portal-Render og Oct- / BSP-Tree-Render. Testene hører til det test scenario, hvor vi har lavet en reel verden hvori kameraet følger den bestemt rute igennem verdenen. 6.1 Lavt antal Polygoner Her kommer testene for verden med et lavt antal polygoner. Overskrifterne på graferne forstæller hvilken test der blev udført. None and SimpleRenderX - Low Polygon Illustration 23: Simple-Render & No rendering Low polygon Side 4/79

41 SimpleRenderX - Low Polygon Illustration 24: Simple-Render - Low polygon OctTreeRender OctTreeRenderX 1Polygon - Low Polygon Illustration 25: OctTree-Render 1 polygon pr. node - Low polygon Oct-Tree-Renderen (1 polygoner pr. node) med Simple-Render testen som reference. Side 41/79

42 OctTreeRenderX 25Polygon - Low Polygon Illustration 26: OctTree-Render 25 polygon pr. node - Low polygon Oct-Tree-Renderen (25 polygoner pr. node) med Simple-Render testen som reference. OctTreeRenderX 1Polygon - Low Polygon Illustration 27: OctTree-Render 1' polygon pr. node - Low polygon Oct-Tree-Renderen (1' polygoner pr. node) med Simple-Render testen som reference. Side 42/79

43 6.1.2 BSPTreeRender BSPTreeRenderX 1Polygon - Low Polygon Illustration 28: BSPTree-Render 1 polygon pr. node - Low polygon BSP-Tree-Renderen (1 polygoner pr. node) med Simple-Render testen som reference. BSPTreeRenderX 25Polygon - Low Polygon Illustration 29: BSPTree-Render 25 polygon pr. node - Low polygon BSP-Tree-Renderen (25 polygoner pr. node) med Simple-Render testen som reference. Side 43/79

44 BSPTreeRenderX 1Polygon - Low Polygon Illustration 3: BSPTree-Render 1' polygon pr. node - Low polygon BSP-Tree-Renderen (1' polygoner pr. node) med Simple-Render testen som reference PortalRender PortalRenderX - Low Polygon Illustration 31: Portal-Render - Low polygon Brun = Simple-Render, Guk = Portal-Render, Blå = Portal-Render forbederet. Side 44/79

45 Testforløbet for to typer af Portal-Render med Simple-Render som reference PortalRender og OctTreeRender PortalOctRenderX 1Polygon - Low Polygon Illustration 32: Portal- & OctTree-Render, 1 polygoner pr. node - Low polygon Oct-Tree-Render (gul) (1 polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (brun) som reference. Side 45/79

46 PortalOctRenderX 25Polygon - Low Polygon Illustration 33: Portal- & OctTree-Render, 25 polygoner pr. node - Low polygon Oct-Tree-Render (gul) (25 polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (brun) som reference. PortalOctRenderX 1Polygon - Low Polygon Illustration 34: Portal- & OctTree-Render, 1' polygoner pr. node - Low polygon Oct-Tree-Render (gul) (1' polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (brun) som reference. Side 46/79

47 6.1.5 PortalRender og BSPTreeRender PortalBSPRenderX 1Polygon - Low Polygon Illustration 35: Portal- & BSPTree-Render, 1 polygoner pr. node - Low polygon BSP-Tree-Render (gul) (1 polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (brun) som reference. PortalBSPRenderX 25Polygon - Low Polygon Illustration 36: Portal- & BSPTree-Render, 25 polygoner pr. node - Low polygon Side 47/79

48 BSP-Tree-Render (gul) (25 polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (brun) som reference. PortalBSPRenderX 1Polygon - Low Polygon Illustration 37: Portal- & BSPTree-Render, 1' polygoner pr. node - Low polygon BSP-Tree-Render (gul) (1' polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (brun) som reference. 6.2 Højt antal Polygoner Her kommer testene for verden med et lavt antal polygoner. Overskrifterne på graferne forstæller hvilken test der blev udført SimpleRender Side 48/79

49 SimpleRenderX - High Polygon Illustration 38: Simple-Render - High polygon OctTreeRender OctTreeRenderX - 25Polygoner Illustration 39: OctTree-Render, 25 polygoner pr. Node High polygon Oct-Tree-Renderen (25 polygoner pr. node) med Simple-Render testen som reference. Side 49/79

50 OctTreeRenderX - 1Polygoner Illustration 4: OctTree-Render, 1' polygoner pr. node High polygon Oct-Tree-Renderen (1' polygoner pr. node) med Simple-Render testen som reference. OctTreeRenderX - 1Polygoner Illustration 41: OctTree-Render, 1' polygoner pr. node Oct-Tree-Renderen (1' polygoner pr. node) med Simple-Render testen som reference BSPTreeRender Side 5/79

51 BSPTreeRenderX - 25Polygoner Illustration 42: BSPTree-Render, 25 polygoner pr. node BSP-Tree-Renderen (25 polygoner pr. node) med Simple-Render testen som reference. BSPTreeRenderX - 1Polygoner Illustration 43: BSPTree-Render, 1' polygoner pr. node BSP-Tree-Renderen (1' polygoner pr. node) med Simple-Render testen som reference. Side 51/79

52 BSPTreeRenderX - 1Polygoner Illustration 44: BSPTree-Render, 1' polygoner pr. node BSP-Tree-Renderen (1' polygoner pr. node) med Simple-Render testen som reference PortalRender Side 52/79

53 Portal-RenderX - High Polygon Illustration 45: Portal-Render - High polygon Brun = Simple-Render, Sort = Portal, Blå = Portal-Render forbederet. SimplePortalRenderX - High Polygon Column I Column J Column AM Column AZ Illustration 46: Portal-Render, Polygons Render'ed J = Total antal polygoner. I = Simple-Render antal polygoner. Side 53/79

54 AM = Portal-Render antal polygoner. AZ = Portal-Render forbederet antal polygoner. SimplePortalRenderX - High Polygon Column F Column AJ Column AW Illustration 47: Portal-Render, Objects render'ed - High polygon F = Simple-Render antal af objekter renderet. AJ = Portal-Render antal af objekter renderet. AW = Portal-Render forbederet antal af objekter renderet PortalRender og OctTreeRender Side 54/79

55 PortalRenderX and OctTreeRenderX 25Polygon - High Polygon Column B Column AS Column BV Illustration 48: Portal- & OctTree-Render 25 polygoner pr node - High polygon Oct-Tree-Render (blå) (25 polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (sort) og Simple-Render (brun) som reference. PortalRenderX and OctTreeRenderX 1Polygon - High Polygon Column B Column AS Column CJ Illustration 49: Portal- & OctTree-Render 1' polygoner pr node - High polygon Oct-Tree-Render (blå) (1' polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (gul) og Simple-Render (brun) som reference. Side 55/79

56 PortalRenderX and OctTreeRenderX 1Polygon - High Polygon Column B Column AS Column CX Illustration 5: Portal- & OctTree-Render 1' polygoner pr node - High polygon Oct-Tree-Render (blå) (1' polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (sort) og Simple-Render (brun) som reference PortalRender og BSPTreeRender PortalRenderX and BSPTreeRenderX 25Polygon - High Polygon Column B Column AS Column EB Illustration 51: Portal- & BSPTree-Render 25 polygoner pr node - High polygon BSP-Tree-Render (blå) (25 polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (sort) og Simple-Render (brun) som reference. Side 56/79

57 PortalRenderX and BSPTreeRenderX 1Polygon - High Polygon Column B Column AS Column EO Illustration 52: Portal- & BSPTree-Render 1' polygoner pr node - High polygon BSP-Tree-Render (blå) (1' polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (sort) og Simple-Render (brun) som reference. PortalRenderX and BSPTreeRenderX 1Polygon - High Polygon Column B Column AS Column FB Illustration 53: Portal- & BSPTree-Render 1' polygoner pr node - High polygon BSP-Tree-Render (blå) (1' polygoner pr. node) kombineret med Portal-Renderen med PotalRenderen (sort) og Simple-Render (brun) som reference. Side 57/79

58 7 MultiThreading I dette afsnit er alle test resultaterne for trådnings testene. Side 58/79

59 7.1 Enkelt Trådet design Test resultater for enkelt trådet design. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 484,87,,, 48,89,,, 43,32,,, 278,97,,, 168,7,,, 76,34,,, 32,88,,, Balls FPS σ Thread1 σ Thread1 σ 8,298,14, 1 3,215,, 2 17,1825,1,1 4 9,4229,, 8 6,8849,4, 16 4,2145,, 32 1,3424,, Reference FPS Reference FPS w. σ Wait times std. Deviation (σ) wait times,15,,14,13,12,11,1,9,8,7,6,5,,,,,,,4,3,2,1,,,, Side 59/79

60 7.2 Engine-tråd og Render-tråd Test resultater for det to trådet design. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 129,52,5,,5 125,2,2,1,3 181,61,,8,8 576,91,,16,16 363,43,,26,27 168,57,,58,58 7,32,,139,139 Balls FPS σ Thread1 σ Thread1 σ 4,193,99, ,5662,81, ,221,18, ,576,28, ,32,23, ,1789,1, ,331,5,156 FPS FPS w. σ Wait times std. Deviation (σ) wait times,14,275,13,25,12,11,225,1,2,9,175,8,15,7,6,125,5,1,4,75,3,5,2,25,1,, Side 6/79

61 7.3 To trådet Collision ingen Rendering Test resultater for at tråde Collision med to tråde. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 1173,54,5,,5 1191,48,2,1,3 1111,28,,5,6 653,91,,14,15 323,43,,3,3 167,16,,58,58 72,87,,135,135 Balls FPS σ Thread1 σ Thread1 σ 9,9637,58, ,4381,67, ,1335,85, ,2464,9,31 8 1,2923,4, ,3931,22, ,3458,13,125 FPS FPS w. σ Wait times std. Deviation (σ) wait times,14,25,13,225,12,11,2,1,175,9,8,15,7,125,6,1,5,4,75,3,5,2,25,1,, Side 61/79

62 7.4 To trådet Collision m. to trådet Portal ingen Rendering Test resultater for at tråde både Collision og Portal med hver to tråde. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 1167,25,,2,3 955,6,,9,1 693,25,1,12,12 58,97,,19,19 343,53,,28,28 183,86,,53,53 82,6,,119,119 Balls FPS σ Thread1 σ Thread1 σ 75,2475,71, ,8486,16, ,6498,25, ,997,16, ,2594,6, ,9125,2, ,8614,6,15 FPS FPS w. σ Wait times std. Deviation (σ) wait times,12,225,11,2,1,9,175,8,15,7,125,6,5,1,4,75,3,5,2,25,1,, Side 62/79

63 7.5 2 M. to tråde pr. SceneNode ingen Rendering Test resultater for at tråde både Collision og Portal med hver to tråde, yderligere er der to tråde pr scenenode. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 633,19,,14,14 415,79,,2,21 286,55,,33,33 187,83,,46,46 95,64,,99,99 5,34,,19,19 21,37,,465,465 Balls FPS σ Thread1 σ Thread1 σ 4,8521,9, ,7952,12, ,3982,7, ,46,3,93 8 4,9945,3, ,384,3, ,93,4,168 FPS FPS w. σ Wait times std. Deviation (σ) wait times,5,18,45,16,4,14,35,12,3,1,25,8,2,6,15,1,4,5,2,, Side 63/79

64 7.6 2 To tråde pr. SceneNode, forbederet ingen Rendering Test resultater for at tråde både Collision og Portal med hver to tråde, hver scenenode tråd får hver 1 noder. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 1147,79,,3,3 781,38,,11,12 653,89,,14,14 44,44,,2,21 255,5,,34,34 132,26,,63,63 48,88,,173,173 Balls FPS σ Thread1 σ Thread1 σ 62,5489,58, ,2779,16,5 2 35,5294,29, ,211,8, ,3966,2, ,7783,3, ,6863,2,28 FPS FPS w. σ Wait times std. Deviation (σ) wait times,18,3,16,275,25,14,225,12,2,1,175,15,8,125,6,1,4,75,5,2,25,, Side 64/79

65 7.7 2 To tråde pr. SceneNode, hvor de ikke køre ingen Rendering Test resultater for at tråde både Collision og Portal med hver to tråde, hver scenenode tråd får hver 1 noder. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 1112,51,,5,6 781,45,,11,11 64,9,,14,14 417,99,,23,23 261,62,,37,37 14,15,,69,69 49,25,,199,199 Balls FPS σ Thread1 σ Thread1 σ 81,391,91, ,8192,31, ,9244,26, ,9693,16, ,819,5, ,2162,47, ,8539,13,167 FPS FPS w. σ Wait times std. Deviation (σ) wait times,2,2,18,18,16,16,14,14,12,12,1,1,8,8,6,6,4,4,2,2,, Side 65/79

66 7.8 2 En EngineX tråd, en RenderX tråd Test resultater for at tråde Enginen og Renderen. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 573,74,15,,15 488,7,12,,12 474,33,6,1,6 381,78,,16,16 18,51,,42,42 79,18,,112,112 29,81,,316,317 Balls FPS σ Thread1 σ Thread1 σ 19,5718,245, ,7299,98,35 2 5,9972,126, ,2454,9,13 8 6,5499,9, ,6466,4, ,331,,12 FPS FPS w. σ Wait times std. Deviation (σ) wait times,325,25,3,225,275,25,2,225,175,2,15,175,125,15,125,1,1,75,75,5,5,25,25,, Side 66/79

67 7.9 2 To tråde for Collsion og to for Portal Test resultater for at tråde både Collision og Portal med hver to tråde. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 481,22,12,,12 455,14,11,1,11 463,57,6,1,6 361,9,3,3,6 259,81,3,8,11 137,83,2,22,25 68,91,6,17,23 Balls FPS σ Thread1 σ Thread1 σ 14,138,134, ,9594,74, ,2735,97, ,7747,65, ,4112,7, ,179,31, ,7244,44,192 FPS FPS w. σ Wait times std. Deviation (σ) wait times,25,2,23,18,2,16,18,14,15,12,13,1,1,8,8,6,5,4,3,2,, Side 67/79

68 7.1 To tråde pr. SceneNode Test resultater for at tråde både Collision og Portal med hver to tråde og hver SceneNode har to tråde. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 467,16,4,1,5 338,6,3,4,7 255,66,2,1,12 158,68,1,23,24 89,6,,65,66 45,9,,142,143 2,53,,428,429 Balls FPS σ Thread1 σ Thread1 σ 28,2817,11, ,1791,59, ,3985,34, ,5421,18,18 8 7,4344,12, ,1313,5, ,865,1,25 FPS FPS w. σ Wait times std. Deviation (σ) wait times,45,3,4,275,25,35,225,3,2,25,175,15,2,125,15,1,1,75,5,5,25,, Side 68/79

69 7.11 To tråde pr. SceneNode, forbederet Test resultater for at tråde både Collision og Portal med hver to tråde og 1 SceneNoder har to tråde. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 48,41,12,,12 464,58,9,,9 467,68,5,1,6 339,86,3,6,9 226,79,2,13,15 111,26,4,27,32 44,71,4,57,6 Balls FPS σ Thread1 σ Thread1 σ 9,5664,15, ,238,79, ,9478,78, ,6651,17, ,448,3, ,7866,6, ,3285,24,299 FPS FPS w. σ Wait times std. Deviation (σ) wait times,65,3,6,275,55,25,5,225,45,2,4,175,35,15,3,125,25,2,1,15,75,1,5,5,25,, Side 69/79

70 To tråde pr. SceneNode, hvor de ikke køre Test resultater for at tråde både Collision og Portal med hver½ to tråde og SceneNoder trådene køre ikke. Tabellen nedenunder til venstre viser vente tiderne mellem Enginen og Renderen og til højre viser den standardafvigelserne. De 4 andre grafer på denne side viser grafisk de forskellige aspekter som tabellen viser. Balls FPS Thread1 wait Thread2 wait Total wait (ms) 476,41,11,1,12 472,75,8,1,9 468,53,4,2,6 346,8,2,8,1 211,43,3,11,15 111,39,4,25,29 44,49,8,49,57 Balls FPS σ Thread1 σ Thread1 σ 12,437,198, ,829,128, ,2747,65, ,4186,37, ,15,65, ,689,34, ,852,68,292 FPS FPS w. σ Wait times std. Deviation (σ) wait times,6,3,55,275,5,25,45,225,4,2,35,175,3,15,25,125,2,1,15,75,1,5,5,25,, Side 7/79

71 8 3DGameEngine-testmiljøets klasser Her er de klasser som vores testmiljø består af, detvil være udelukkende klasser som vi selv har udarbejdet under speciale forløbet. Side 71/79

72 Side 72/79

73 Side 73/79

74 Side 74/79

75 Side 75/79

76 Side 76/79

XNA3DGameEngine. XNA 3DGameEngine. Test af performance forbederne teknikker til 3DGameEngines. Speciale. Afleveret den 28/02-2007.

XNA3DGameEngine. XNA 3DGameEngine. Test af performance forbederne teknikker til 3DGameEngines. Speciale. Afleveret den 28/02-2007. XNA 3DGameEngine Test af performance forbederne teknikker til 3DGameEngines Speciale Adrian Peter Togeskov E-mail: adriant@itu.dk Cpr-Nr: 2477-2453 Vejleder: E-mail: Peter Rahlff Friis E-mail: pbfriis@itu.dk

Læs mere

Acceleration af Kollisionsdetektion på Parallelle Computerarkitekturer

Acceleration af Kollisionsdetektion på Parallelle Computerarkitekturer af Kollisionsdetektion på Parallelle Computerarkitekturer Speciale Andreas Rune Fugl anfug03@student.sdu.dk Thomas Frederik Kvistgaard Ellehøj ththy03@student.sdu.dk Datateknologi ved Teknisk Fakultet

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Unity Guide 1 CONTENTS

Unity Guide 1 CONTENTS Unity Guide 1 CONTENTS Unity interface... 2 Components... 4 Materials... 7 Scripts opbygning... 8 Terrain... 8 Animations... 9 Particle system... 11 Audio... 11 Sprites... 12 GUI... 14 UNITY INTERFACE

Læs mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling af DOTNET applikationer til MicroStation i C# Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt

Læs mere

Daniel Kaasing 2012.3 Roskilde Tekniske Gymnasium 13-05-2015. Programmeringsjournal. Lavet af Daniel Kaasing. Lærer: Karl G Bjarnason

Daniel Kaasing 2012.3 Roskilde Tekniske Gymnasium 13-05-2015. Programmeringsjournal. Lavet af Daniel Kaasing. Lærer: Karl G Bjarnason Programmeringsjournal Lavet af Daniel Kaasing Lærer: Karl G Bjarnason 1 "Jeg bekræfter herved med min underskrift, at opgavebesvarelsen er udarbejdet af mig. Jeg har ikke anvendt tidligere bedømt arbejde

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

Datastrukturer (recap)

Datastrukturer (recap) Dictionaries Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer (API for adgang

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Rolf Fagerberg. Forår 2012

Rolf Fagerberg. Forår 2012 Forår 2012 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM502 og DM503 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM502 og DM503 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

Læs mere

Installation af Oracle 10g Release 2 database

Installation af Oracle 10g Release 2 database Installation af Oracle 10g Release 2 database Oracle 10g database indeholder databasesoftware, enterprise manager, SQL*Plus m.m., HTML DB (i dag kendt som Application Express) og tilhørende HTTP Server

Læs mere

Algoritmisk geometri

Algoritmisk geometri Algoritmisk geometri 1 Intervalsøgning 2 Motivation for intervaltræer Lad der være givet en database over ansatte i en virksomhed Ansat Alder Løn Ansættelsesdato post i databasen Antag, at vi ønsker at

Læs mere

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012 Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012 May 15, 2012 1 CONTENTS 2012 CONTENTS Contents 1 Kompleksitet 3 1.1 Køretid................................................ 3 1.2 Asymptotisk

Læs mere

5. OPSÆTNING DOKUMENTSKABELONER 5.1 TRIN

5. OPSÆTNING DOKUMENTSKABELONER 5.1 TRIN 5. OPSÆTNING DOKUMENTSKABELONER Under fanen Dok. skabeloner kan du arbejde med de skabeloner som du har i systemet, eller du kan oprette nye. I denne vejledning kigger vi på hvordan du kan tilrette selve

Læs mere

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2015 Forår 2015 Dagens program 1 2 3 4 5 Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Deltagere: BA i Datalogi BA i Software

Læs mere

Programmering I Java/C#

Programmering I Java/C# Programmering I Java/C# Dit første projekt Datatekniker Intro to C# C# (C Sharp) Et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog Udviklet af Microsoft, ledet af danskeren

Læs mere

Velkommen til den nye og forbedrede Dynamicweb 9

Velkommen til den nye og forbedrede Dynamicweb 9 Velkommen til den nye og forbedrede Dynamicweb 9 Effektive kundeoplevelser på tværs af alle kanaler med én integreret platform. Én platform dækker (alle) dine digitale behov Med Dynamicweb 9 får du adgang

Læs mere

Lad os prøve GeoGebra.

Lad os prøve GeoGebra. Brug af Geogebra i matematik Programmet Geogebra er et matematisk tegneprogram. Det findes i øjeblikket i flere versioner. Direkte på nettet uden download. http://www.geogebra.org/cms/ Klik på billedet.!

Læs mere

Manual til Statistik. ShopStatistics. Med forklaring og eksempler på hvordan man håndterer statistik. Consulo ApS 20-03-2009

Manual til Statistik. ShopStatistics. Med forklaring og eksempler på hvordan man håndterer statistik. Consulo ApS 20-03-2009 2012 Manual til Statistik ShopStatistics Med forklaring og eksempler på hvordan man håndterer statistik Consulo ApS 20-03-2009 1 Introduktion... 3 1.1 Formål... 3 1.2 Anvendelse... 3 2 Referencer... 4

Læs mere

Datastrukturer (recap)

Datastrukturer (recap) Dictionaries Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer (API for adgang

Læs mere

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer: Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus

Læs mere

OrCAD Capture TCL IDE med Eclipse

OrCAD Capture TCL IDE med Eclipse OrCAD Capture TCL IDE med Eclipse OrCAD Capture TCL er et script sprog til at lave applikationer til OrCAD Capture. Eclipse er et gratis udviklingsmiljø med debug muligheder. Denne guide hjælper med at

Læs mere

Introduktion til DM507

Introduktion til DM507 Introduktion til DM507 Rolf Fagerberg Forår 2017 1 / 20 Hvem er vi? Underviser: Rolf Fagerberg, IMADA Forskningsområde: algoritmer og datastrukturer 2 / 20 Hvem er vi? Underviser: Rolf Fagerberg, IMADA

Læs mere

VÆRKTØJER TIL ARKITEKTER GUIDE TIL HÅNDTERING AF DWG, TIPS OG TRICKS

VÆRKTØJER TIL ARKITEKTER GUIDE TIL HÅNDTERING AF DWG, TIPS OG TRICKS VÆRKTØJER TIL ARKITEKTER GUIDE TIL HÅNDTERING AF DWG, TIPS OG TRICKS VÆRKTØJER TIL ARKITEKTER INDHOLD DE FORSKELLIGE FILTYPER SKIFT VINKEL/PERSPEKTIV I AUTOCAD OM DWG FILER Håndtering af downloadede DWG

Læs mere

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø EG Data Inform Byggebasen WCF og webservices Jens Karsø 10 Indholdsfortegnelse Byggebasen Services indledning... 2 Målsætning... 2 Valg af teknologier... 3 Kommunikationsmodel for byggebasen... 3 Services.byggebasen.dk...

Læs mere

ViKoSys. Virksomheds Kontakt System

ViKoSys. Virksomheds Kontakt System ViKoSys Virksomheds Kontakt System 1 Hvad er det? Virksomheds Kontakt System er udviklet som et hjælpeværkstøj til iværksættere og andre virksomheder som gerne vil have et værktøj hvor de kan finde og

Læs mere

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Tirsdag den 24. juni 2014, kl. 10:00 14:00 Besvarelsen skal afleveres elektronisk. Se

Læs mere

Symmetrisk Traveling Salesman Problemet

Symmetrisk Traveling Salesman Problemet Symmetrisk Traveling Salesman Problemet Videregående Algoritmik, Blok 2 2008/2009, Projektopgave 2 Bjørn Petersen 9. december 2008 Dette er den anden af to projektopgaver på kurset Videregående Algoritmik,

Læs mere

P2-projektforslag Kombinatorik: grafteori og optimering.

P2-projektforslag Kombinatorik: grafteori og optimering. P2-projektforslag Kombinatorik: grafteori og optimering. Vejledere: Leif K. Jørgensen, Diego Ruano 1. februar 2013 1 Indledning Temaet for projekter på 2. semester af matematik-studiet og matematikøkonomi-studiet

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

5 ARBEJDE MED EDITOREN

5 ARBEJDE MED EDITOREN 5 ARBEJDE MED EDITOREN Editor (eller Rich Tekst Editor) er et indbygget indholdsredigerings værktøj, hvor man uden nogen kendskab til HTML kodning kan skrive tekst, indsætte billeder, videoer og links.

Læs mere

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2015 Forår 2015 Dagens program 1 2 3 4 5 Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Deltagere: BA i Datalogi BA i Software Engineering BA i Matematik-Økonomi BA i Anvendt Matematik BA

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 2. maj 200. Kursusnavn Algoritmer og datastrukturer Kursus nr. 02326. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne:

Læs mere

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#. Denne guide er oprindeligt udgivet på Eksperten.dk.NET 4.5 og C# 5.0 Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#. Skrevet den 11.

Læs mere

Rolf Fagerberg. Forår 2014

Rolf Fagerberg. Forår 2014 Forår 2014 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: Format: Programmering og Diskret matematik I (forelæsninger), TE (øvelser), S (arbejde selv og i studiegrupper) Eksamenform: Skriftlig

Læs mere

Sebastian Holtze-Petersen HTX Roskilde 09/02/2014 Jacob Hennecke. IT Applikationsudvikling

Sebastian Holtze-Petersen HTX Roskilde 09/02/2014 Jacob Hennecke. IT Applikationsudvikling IT Applikationsudvikling Præproduktion Vores grundidé stammede fra Sebastians kendskab til en familie hvor et af børnene er diagnosticeret med autisme. Vi fik så ideen at lave en applikation målrettet

Læs mere

Dokumentering af umbraco artikeleksport:

Dokumentering af umbraco artikeleksport: Dokumentering af umbraco artikeleksport: Lav en artikel side 2-3. Installationsguide side 3-5. Opsættelse af databasen og web.config side 5-8. Umbraco: templates side 8. Umbraco: borger.dk tab side 8.

Læs mere

Installationsguide til Oracle Database XE 10.2 og APEX 3.1.1

Installationsguide til Oracle Database XE 10.2 og APEX 3.1.1 Installationsguide til Oracle Database XE 10.2 og APEX 3.1.1 Oracle Database Express Edition (XE) er Oracles lille gratis database tilsvarende Microsofts SQL Server Express Edition. Oracle Database XE

Læs mere

SIGIL Sådan opretter du en e- bog Step by Step

SIGIL Sådan opretter du en e- bog Step by Step SIGIL Sådan opretter du en e- bog Step by Step Af Gitte Winter Graugaard Nov. 2013, Sigil version 0.7.2 1 Her følger en intro skridt for skridt til at oprette en e- bog i SIGIL og publicere den på SAXO

Læs mere

Computerspil Gruppe: Julia, Rasmus N, Edgar og Frederik P

Computerspil Gruppe: Julia, Rasmus N, Edgar og Frederik P Computerspil Gruppe: Julia, Rasmus N, Edgar og Frederik P Indledning Vi fik til opgave at følge den basale systemudviklingsmodel, som vi skal følge og dokumentere ud fra. Inden at dokumenterer hvordan

Læs mere

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. 19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel

Læs mere

Martin Geisler. Uge 49, 2001

Martin Geisler. Uge 49, 2001 Min dintprog-browser Martin Geisler Uge 49, 2001 Resumé Dette dokument beskriver tankerne bag min dintprog-browser, en browser skrevet i Java der skal kunne fortolke en mindre delmængde af HTML 4, kaldet

Læs mere

Active Builder - Brugermanual

Active Builder - Brugermanual Active Builder - Brugermanual Version: Release 2.0 Sprog: Dansk Copyright 2014 - Talk Active ApS INDHOLDSFORTEGNELSE INDHOLDSFORTEGNELSE... 2 1. HURTIGT OVERBLIK... 4 1.1 Vælg URL:... 4 1.2 Vælg en skabelon:...

Læs mere

Bekrig Klonerne. Introduktion. Scratch. I dette projekt skal du lære, hvordan du laver et spil, hvor du skal redde Jorden fra monstre i rummet.

Bekrig Klonerne. Introduktion. Scratch. I dette projekt skal du lære, hvordan du laver et spil, hvor du skal redde Jorden fra monstre i rummet. Scratch 2 Bekrig Klonerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club.

Læs mere

Klasse 1.4 Michael Jokil 03-05-2010

Klasse 1.4 Michael Jokil 03-05-2010 HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk

Læs mere

Større skriftlige opgaver i Microsoft Word 2007 Indhold

Større skriftlige opgaver i Microsoft Word 2007 Indhold Større skriftlige opgaver i Microsoft Word 2007 Indhold Større skriftlige opgaver i Microsoft Word 2007... 1 Inddeling i afsnit... 2 Sideskift... 2 Sidetal og Sektionsskift... 3 Indholdsfortegnelse...

Læs mere

SecureAware Opfølgning Manual

SecureAware Opfølgning Manual SecureAware Opfølgning Manual Manualen beskriver brugen af SecureAware version 3 Dokument opdateret: juni 2009 Om dette dokument Dette dokument er en vejledning i brug af opfølgnings-modulet i SecureAware.

Læs mere

IT og Programmering eksamens projekt

IT og Programmering eksamens projekt IT og Programmering eksamens projekt Visualisering af Gravitation Roskilde HTX Anders Kær Bennetsen D. 20-05-2010 IT og Programmering 1.1 Indledning:... 4 1.2 Beskrivelse af Ide:... 4 1.3 Definition af

Læs mere

Når du holder møder i Connect

Når du holder møder i Connect Når du holder møder i Connect Det er vigtigt at den/de der er host og presenter på mødet sidder ved en forholdsvis kraftig computer, og har en god bredbåndsforbindelse. Hvis man skal vise præsentationer,

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

Når du har hentet disse programmer installerer du dem alle og følger guiden herunder.

Når du har hentet disse programmer installerer du dem alle og følger guiden herunder. Debranding af Nokia mobiler! For at komme i gang skal du have din computer forbundet til nettet, have et datakabel der kan forbinde din Nokia telefon med din computer og hente disse her 3 programmer :

Læs mere

Mini guide til Mobilize Me

Mini guide til Mobilize Me Mini guide til Mobilize Me Maj 2017 Login: Åben Mobilize Me på din telefon, tablet eller computer og indtast det brugernavn og den adgangskode, som du har modtaget fra Mobilize Me. Hvis du ønsker at bruge

Læs mere

Processer og tråde. dopsys 1

Processer og tråde. dopsys 1 Processer og tråde dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne) hhv. små systemer: Multiprogrammering og time-sharing (fra 60 erne og frem): dopsys

Læs mere

SecureAware Compliance Analysis Manual

SecureAware Compliance Analysis Manual SecureAware Compliance Analysis Manual Manualen beskriver brugen af SecureAware version 3 Dokument opdateret: november 2009 Om dette dokument Dette dokument er en vejledning i, hvordan du opretter compliance-checks.

Læs mere

QR koder kræver dels en fysisk genstand at klistre koden på, og dels er operationen noget omfattende med print af kode og fysisk opsætning af denne.

QR koder kræver dels en fysisk genstand at klistre koden på, og dels er operationen noget omfattende med print af kode og fysisk opsætning af denne. Notat SEGES P/S Koncern Digital Stedfæstede instrukser ved brug af Recho Ansvarlig JPH Projekt: 7463, Kompetenceudvikling - når landmanden har tid og behov Oprettet 12-2015 Side 1 af 6 Stedfæstede instrukser

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

10. Fra midtpunktet tegnede jeg en sekskant med polygon tool, som blev logoets ramme.

10. Fra midtpunktet tegnede jeg en sekskant med polygon tool, som blev logoets ramme. GRAFIK Grafik Beskrivelse Opgaven Design af nyt logo til Tipsbladet Programmer Adobe Illustrator Værktøjer Polygon tool Rectangle tool Align to pixel grid Guides Transform Outline Stroke Proces 1. Jeg

Læs mere

CONTENTS 1. KOM GODT IGANG... 3 2. JEG HAR WINDOWS 7 OG ØNSKER AT UDVIKLE APPS TIL WINDOWS PHONE 7... 4 2.1 Opret en DreamSpark konto... 4 2.

CONTENTS 1. KOM GODT IGANG... 3 2. JEG HAR WINDOWS 7 OG ØNSKER AT UDVIKLE APPS TIL WINDOWS PHONE 7... 4 2.1 Opret en DreamSpark konto... 4 2. CONTENTS 1. KOM GODT IGANG... 3 2. JEG HAR WINDOWS 7 OG ØNSKER AT UDVIKLE APPS TIL WINDOWS PHONE 7... 4 2.1 Opret en DreamSpark konto... 4 2.2 Download udviklingssoftware... 6 2.2.1 Hent Visual Studio

Læs mere

DKAL Snitflader REST Register

DKAL Snitflader REST Register DKAL Snitflader REST Register 1 Indholdsfortegnelse A2.1 INTRODUKTION 3 A2.1.1 HENVISNINGER 3 A2.1.2 LÆSEVEJLEDNING 4 A2.1.2.1 SÅDAN LÆSES EN REST GRAF 4 A2.1.2.2 SÅDAN LÆSES EN RESSOURCE OG EN TYPE 4

Læs mere

Kom godt i gang med I-bogen

Kom godt i gang med I-bogen Kom godt i gang med I-bogen At åbne bogen Det allerførste, du skal gøre, for at kunne arbejde med i-bogen, er at aktivere den. Det gøres ved at oprette en konto på systime.dk og derefter aktivere bogen

Læs mere

Vejledning til referencehåndteringssystemet. Forsvarets Bibliotekscenter Anita Elleby

Vejledning til referencehåndteringssystemet. Forsvarets Bibliotekscenter Anita Elleby Vejledning til referencehåndteringssystemet Forsvarets Bibliotekscenter Anita Elleby Jeg håber, at du vil få glæde af denne vejledning til referencehåndteringssystemet Zotero. Hvis du får problemer undervejs

Læs mere

Fang Prikkerne. Introduktion. Scratch

Fang Prikkerne. Introduktion. Scratch Scratch 2 Fang Prikkerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

Mendeley kan hjælpe dig med at organisere din forskning og samarbejde med andre online.

Mendeley kan hjælpe dig med at organisere din forskning og samarbejde med andre online. Mendeley på Mac Mendeley er både en reference manager og et akademisk socialt netværk. Mendeley kan hjælpe dig med at organisere din forskning og samarbejde med andre online. Mendeley kan generere litteraturlister

Læs mere

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er en unik simpel vej mellem ethvert par af punkter i

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 7. juni 00, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

Læs mere

Rekursion og dynamisk programmering

Rekursion og dynamisk programmering Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.

Læs mere

Computerens - Anatomi

Computerens - Anatomi 2014 Computerens - Anatomi Rapporten er udarbejdet af Andreas og Ali Vejleder Karl G Bjarnason Indholdsfortegnelse Formål... 2 Indledning... 2 Case... 3 Design... 3 Skitser... 4 Planlægning... 5 Kravsspecifikation...

Læs mere

IT projekt uge 4 9. Marie Vinter, Roskilde Tekniske Gymnasium, klasse 2.6 IT, bw, uge 4 9 2013

IT projekt uge 4 9. Marie Vinter, Roskilde Tekniske Gymnasium, klasse 2.6 IT, bw, uge 4 9 2013 PHP-Projekt IT projekt uge 4 9 Marie Vinter, Roskilde Tekniske Gymnasium, klasse 2.6 IT, bw, uge 4 9 2013 4-3-2013 Indholdsfortegnelse Indledende afsnit... 2 Brainstorm... 2 User stories... 2 Problemformulering...

Læs mere

Installation af GPS med tilslutning til USB port

Installation af GPS med tilslutning til USB port Indholdsfortegnelse Opsætning af GPS-tilslutning... 1 1: Installation af driver... 2 2: Opsætning af COM-port... 2 3: Vælg COM-port i DLS NG... 3 4: Brug af GPSViewer testprogram... 5 5: Hvis COM-port

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

DMX styring med USB-interface

DMX styring med USB-interface DMX styring med USB-interface Introduktion...2 DMX bibliotek...3 Programmering af kanaler...7 Sådan skabes et show/en lyssekvens...11 Introduktion DMX LightPlayer er en avanceret men meget brugervenlig

Læs mere

WELLPLOT VER. 3 BRUGERMANUAL

WELLPLOT VER. 3 BRUGERMANUAL WELLPLOT VER. 3 BRUGERMANUAL I GIS 2002 Wellplot ver. 3 BRUGERMANUAL Udarbejdet for: I GIS ApS Titel: Wellplot ver. 3 Brugermanual Dokumenttype: Software manual Udgave: 1 Dato: 20-09-02 Udarbejdet af:

Læs mere

EasyIQ ConnectAnywhere Brugermanual Windows 7, Windows Vista og Windows XP

EasyIQ ConnectAnywhere Brugermanual Windows 7, Windows Vista og Windows XP EasyIQ ConnectAnywhere Brugermanual Windows 7, Windows Vista og Windows XP Indhold Log på EasyIQ ConnectAnywhere... 2 Adgangskode udløbet... 3 Log af EasyIQ ConnectAnywhere... 5 Mulighederne i EasyIQ ConnectAnywhere...

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Tirsdag den 27. maj 2003, kl. 9.00 3.00 Opgave (25%) For konstanten π = 3.4592... gælder identiteten π 2 6 =

Læs mere

Skitsering og rendering med Revit - BIM workflow fra skitse til præsentation

Skitsering og rendering med Revit - BIM workflow fra skitse til præsentation BIM University 2012 Skitsering og rendering med Revit - BIM workflow fra skitse til præsentation v/ André Andersen, Supporter, Arkitekt Indhold i Building Design Suites Workflow i Building Design Suite

Læs mere

Brugers vejledning til indtastning af Naturdata på eksisterende 3- områder

Brugers vejledning til indtastning af Naturdata på eksisterende 3- områder Brugers vejledning til indtastning af Naturdata på eksisterende 3- områder Denne vejledning omfatter indtastning af naturdata på eksisterende 3-områder. Har du opdaget et nyt 3-område, skal du derfor oprette

Læs mere

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning:

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning: Introduktion til EA3 Mit navn er Marc de Oliveira. Jeg er systemanalytiker og datalog fra Københavns Universitet og denne artikel hører til min artikelserie, Forsimpling (som også er et podcast), hvor

Læs mere

Webside score theimblog.net

Webside score theimblog.net Webside score theimblog.net Genereret August 21 2015 02:33 AM Scoren er 53/100 SEO Indhold Titel et Marketing Blog - Great Tips And Advice Længde : 47 Perfekt, din titel indeholder mellem 10 og 70 bogstaver.

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Ruko SmartAir. Updater installation

Ruko SmartAir. Updater installation Ruko SmartAir Updater installation Introduktion. Updateren er en speciel enhed som giver os mulighed for at tilføje, læse og skrive funktioner i en offline installation. Med læse og skrive funktionen kan

Læs mere

Mini-guide for opdatering af hjemmesiden for. SOIF www.soif.dk

Mini-guide for opdatering af hjemmesiden for. SOIF www.soif.dk Mini-guide for opdatering af hjemmesiden for SOIF www.soif.dk Senest opdateret: 03-07-2009 Indholdsfortegnelse 2 Indholdsfortegnelse 2 Lidt generelt om KlubCMS 3 Brugere/Brugergrupper 3 Sideopbygning:

Læs mere

En liste, hvor der kun kan angives et svar. En dropdown menu, hvori kun et svar kan vælges

En liste, hvor der kun kan angives et svar. En dropdown menu, hvori kun et svar kan vælges Huskeseddel til uv-evaluering 1. Sådan oprettes en undersøgelse Klik på ikonet Surveys og dernæst det grønne plus Ny undersøgelse. Navngiv din undersøgelse og vælg under Basic options, om der skal være

Læs mere

MANUAL. Siteloom CMS

MANUAL. Siteloom CMS MANUAL Siteloom CMS www.hjerteforeningen.dk/cms Brugernavn: Password: 3. september, 2012 BASIS FUNKTIONER 1. Kalender... 4 1.a. Opret... 5 1.b. Rediger eller slet... 8 2. Sider... 10 2.a Opret side...

Læs mere

Curriculum vitae. Personlige oplysninger. Præsentation. Projekterfaring

Curriculum vitae. Personlige oplysninger. Præsentation. Projekterfaring Curriculum vitae Personlige oplysninger Navn: Michael Sig Adresse: Hesseløgade 4, 3.th. 2100 København Ø Telefonnr.: 40 97 50 49 www: www.sig-logik.dk Email: michael@sig-post.dk Alder: 32 år (født d. 21.9.1974)

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Table of Contents. Prøveværktøj

Table of Contents. Prøveværktøj PRØVEVÆRKTØJ Table of Contents Opret prøve og tilpas dit fronter-rum... 3 Opret prøve... 4 Tilføj prøveværktøj... 6 Fanen "Indstillinger"... 11 Indstillinger for vindue... 15 Mappe til billeder/multimedier...

Læs mere

2011 Bentley Systems, Incorporated AECOsim Building Designer V8i. Lars Moth-Poulsen, Bentley Systems

2011 Bentley Systems, Incorporated AECOsim Building Designer V8i. Lars Moth-Poulsen, Bentley Systems AECOsim Building Designer V8i Lars Moth-Poulsen, Bentley Systems Architecture Engineering Construction Operation Simulation 2 WWW.BENTLEY.COM AECOsim Building Designer Hvad er AECOsim Building Designer?

Læs mere

Viditronic NDVR Quick Guide. Ver. 2.0

Viditronic NDVR Quick Guide. Ver. 2.0 Viditronic NDVR Quick Guide Ver. 2.0 1 Indholdsfortegnelse 1. HOVEDMENU 3 1.1 START 5 1.2 AKTIVITETSINDIKATOR: 7 1.3 INFORMATIONS VINDUE: 7 1.4 PTZ KAMERA KONTROL: 7 1.5 SKÆRMMENU 8 1.5.1 AKTIVER BEVÆGELSE:

Læs mere

Et nyt vindue vil åbne beder dig om at indtaste dit "Navn ", " Last Name " og " Password" - "Job Title " er ikke nødvendigt at bruge.

Et nyt vindue vil åbne beder dig om at indtaste dit Navn ,  Last Name  og  Password - Job Title  er ikke nødvendigt at bruge. Yammer for " Dummies " Manual Den URL Yammer er : www.yammer.com Du vil modtage en invitation til Yammer. Invitationen sendes til butikken e- mail -adresse (f.eks 2199@br-leg.dk ) og / eller til din butikschef

Læs mere

Mini-guide til Retox Databasen er tilgængelig fra klik på linket

Mini-guide til Retox Databasen er tilgængelig fra  klik på linket Mini-guide til Retox Databasen er tilgængelig fra www.retox.dk, klik på linket Som udgangspunkt kan alle se arbejdspladsbrugsanvisningerne, hvis man er på regionens netværk. Hvis der skal tilføjes eller

Læs mere

Citrix CSP og Certificate Store Provider

Citrix CSP og Certificate Store Provider Project Name Document Title TDC Citrix Citrix og Certificate Store Provider Version Number 1.0 Status Release Author jkj Date 5-10-2006 Trademarks All brand names and product names are trademarks or registered

Læs mere

Mandelbrot smartphone applikation

Mandelbrot smartphone applikation Mandelbrot smartphone applikation Navne: Troels Leth Jensen & Morten Møller Studienumre: 20095039 & 20093873 Fag: ITSMAP 6-1-2012 Indholdsfortegnelse Introduktion... 2 Kravspecifikation... 2 Teori... 2

Læs mere

Forståelse for grafisk workflow

Forståelse for grafisk workflow 2 Forståelse for grafisk workflow I designet af den trykte bog har jeg haft et vågent øje til de overvejelser og design problematikker det medfører at bogen skulle klare at laves til en E-bog. Her vil

Læs mere

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0.

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0. Konkrete funktioner Potenser Som udgangspunkt er brugen af potenser blot en forkortelse for at gange et tal med sig selv et antal gange. Hvis a Rskriver vi a 2 for a a a 3 for a a a a 4 for a a a a (1).

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere