Simulering och rendering av gräs och vind i realtid

Relevanta dokument
Inledning. Kapitel Bakgrund. 1.2 Syfte

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Gel esimulering 22 mars 2008

HAND TRACKING MED DJUPKAMERA

Procedurell Terräng med LOD i OpenGL 4

Byggnationen av Cheopspyramiden - ett visualiseringsprojekt. Mathias Bergqvist, Rikard Gehlin, Henrik Gunnarsson

Procedurell renderingsmotor i Javascript och HTML5

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

Newtons 3:e lag: De par av krafter som uppstår tillsammans är av samma typ, men verkar på olika föremål.

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

TNM022 Proceduella Bilder Rendering av proceduell päls i realtid

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

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

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

Simulering av mänskligt hår

Kulstötning. Israt Jahan Martin Celander Andreas Svensson Jonathan Koitsalu

Koordinatsystem och Navigation

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

UPPGIFTER KAPITEL 2 ÄNDRINGSKVOT OCH DERIVATA KAPITEL 3 DERIVERINGSREGLER

Grafiska pipelinen. Edvin Fischer

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

Partiklars rörelser i elektromagnetiska fält

Komplexa tal. Sid 1: Visa att ekvationerna på sid 1 saknar reella lösningar genom att plotta funktionerna.

SF1626 Flervariabelanalys

Matematisk analys för ingenjörer Matlabövning 3 Numerisk lösning av differentialekvationer

Kapitel 7 Skorsten, trappa och inredning... 3

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360

Generering av L-system fraktaler med Processing.js

" e n Föreläsning 3: Typiska partikelrörelser och accelerationsriktningar

Lösningsförslag Inlämningsuppgift 1 elstatikens grunder

Inlämningsuppgift 4 NUM131

Tentamen TNM077, 3D datorgrafik och animering

Vetenskapsdagen 2016 SciLab för laborativa inslag i matematik eller fysik

LÖSNINGAR TENTAMEN MEKANIK II 1FA102

ANDREAS REJBRAND Elektromagnetism Coulombs lag och Maxwells första ekvation

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

TAIU07 Matematiska beräkningar med Matlab

Innehållsförteckning

Numerisk lösning till den tidsberoende Schrödingerekvationen.

Visualisering med Rhino/Vray/Photoshop av modell som skapats i Revit. AADA15 Revit Workshop 2017 LTH Ludvig Hofsten

Universe Engine Rapport

Complex numbers. William Sandqvist

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.

Final i Wallenbergs Fysikpris

Vi har väl alla stått på en matta på golvet och sedan hastigt försökt förflytta

SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Torsdagen den 4 juni 2015

TANA17 Matematiska beräkningar med Matlab

Robotarm och algebra

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht Block 5, översikt

vux GeoGebraexempel 3b/3c Attila Szabo Niclas Larson Gunilla Viklund Mikael Marklund Daniel Dufåker

SF1664 Tillämpad envariabelanalys med numeriska metoder Lösningsförslag till tentamen DEL A

Tentamen Mekanik F del 2 (FFM521 och 520)

Kv. Ogräset. Martin Stenmarck,

EXAMENSARBETE. Tekniker för optimering av modellering och texturering av spelmodeller. Anders Lorentzen. Teknologie kandidatexamen Datorgrafik

Omtentamen. TNM077 3D-datorgrafik och animering kl 8-12 Inga hjälpmedel. (samt även TNM008 3D-datorgrafik och VR)

TNM085 MODELLERINGSPROJEKT FLYGSIMULATOR. Albin Törnqvist, Emil Rydkvist, Oskar Krantz 15 mars Linköpings Tekniska Högskola

Procedurell 3D-eld på grafikkortet

Texturerade 3D-modeller

MMA127 Differential och integralkalkyl II

Kort introduktion till POV-Ray, del 1

Modellering av Dynamiska system. - Uppgifter till övning 1 och 2 17 mars 2010

Autodesk 3ds Max Design Som nämnts tidigare kan du ändra storlek i tre olika steg genom att klicka på den lilla svarta pilen.

Configura 9.0 Release notes 18 april 2016

Andra EP-laborationen

Bästa skottläge på en fotbollsplan längs långsidan

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

Projekt i TNM084, Procedurella bilder

After Effects Lathund

Tentamen Mekanik F del 2 (FFM521 och 520)

1 Cirkulation och vorticitet

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Laboration 1 Mekanik baskurs

Rumsuppfattning är förmågan att behandla sinnesintryck av former

Handbok Kig. Dominique Devriese Översättare: Stefan Asserhäll

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

KOMIHÅG 10: Effekt och arbete Effekt- och arbetslag Föreläsning 11: Arbete och lagrad (potentiell) energi

Ordinarie tentamen i Mekanik 2 (FFM521)

Lektion 1. Kurvor i planet och i rummet

Naturlagar i cyberrymden VT 2006 Lektion 6. Martin Servin Institutionen för fysik Umeå universitet. Modellering

Obligatoriska uppgifter i MATLAB

Övningstenta Svar och anvisningar. Uppgift 1. a) Hastigheten v(t) får vi genom att integrera: v(t) = a(t)dt

Introduktion. Torsionspendel

Karta över Jorden - viktigt exempel. Sfär i (x, y, z) koordinater Funktionen som beskriver detta ser ut till att vara

GÖTEBORGS UNIVERSITET Institutionen för fysik LÖSNINGAR TILL TENTAMEN I MEKANIK B För FYP100, Fysikprogrammet termin 2

Matematik D (MA1204)

Matematik 3 Digitala övningar med TI-82 Stats, TI-84 Plus och TI-Nspire CAS

Mekanik III, 1FA103. 1juni2015. Lisa Freyhult

LÄRARHANDLEDNING Harmonisk svängningsrörelse

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Tentamen i Mekanik för D, TFYY68

Tentamen Mekanik F del 2 (FFM520)

Attila Szabo Niclas Larson Gunilla Viklund Mikael Marklund Daniel Dufåker. GeoGebraexempel

Attila Szabo Niclas Larson Gunilla Viklund Mikael Marklund Daniel Dufåker. GeoGebraexempel

Exempel :: Spegling i godtycklig linje.

SF1624 Algebra och geometri

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

Exponentialform av komplexa tal Postad av Michell Andersson - 06 dec :27

23 Konservativa fält i R 3 och rotation

Avancerade integraler. Thomas Lingefjärd. Göteborgs universitet

FaceMouse Artikelnummer:

Transkript:

Simulering och rendering av gräs och vind i realtid Linköpings universitet, ITN, TNM085, VT2010 Carl Claesson, 850508-1672, carcl268@student.liu.se Lucas Correia, 870325-7496, lucco863@student.liu.se David Jonsson, 870214-7557, davjo025@student.liu.se Martin Jönsson, 870720-4015, marjo424@student.liu.se 14 mars 2010

Sammanfattning Inom dagens datorgrafik spenderar man sällan tid med att modellera och simulera naturens mindre beståndsdelar på ett detaljerat sätt. En av dessa delar är gräs, vilket detta projekt inriktar sig på. Istället för att använda sig av enkla texturer, simuleras gräset med fysikaliska modeller och renderas som geometriska objekt. Detta leder till ett realistiskt bidrag till en miljö. I framtiden kommer denna typ av detaljerade miljöer bli allt vanligare på grund av kraftfullare datorer.

Innehållsförteckning 1 Inledning 1 1.1 Bakgrund..................................... 1 1.2 Syfte........................................ 1 2 Utvecklingsmiljö 2 3 Fysik 3 3.1 Gräsmodell.................................... 3 3.2 Fysik i två dimensioner.............................. 4 3.3 Fysik i tre dimensioner.............................. 4 4 Numerisk simulering 6 5 Vindsimulering 7 5.1 Areaindelning................................... 7 5.2 Vindtyper..................................... 7 6 Rendering 9 6.1 Modellering.................................... 9 6.2 Ljussättning.................................... 9 6.3 Texturering.................................... 10 6.4 Heightmap och densitymap............................ 10 7 Körinstruktioner och systemkrav 11 8 Resultat och diskussion 13 8.1 Resultat...................................... 13 8.2 Diskussion..................................... 13 8.2.1 Förslag på förbättringar.......................... 13 8.2.2 Svårigheter................................ 14 Litteraturförteckning 15

Figurer 3.1 Gräsets uppbyggnad................................ 3 4.1 Jämförelse av numeriska metoder. Bildkälla: [1]................. 6 6.1 Modellerat grässtrå................................ 9 6.2 Textur med alfakanal............................... 10 6.3 Renderad terräng................................. 10 7.1 Renderad miljö med vind av typ tornado applicerad................ 12

Tabeller 7.1 Kontroller..................................... 11 7.2 Rekommenderat system.............................. 12 8.1 Uppdateringsfrekvens (FPS)........................... 13

Kapitel 1 Inledning 1.1 Bakgrund Det görs inte många realtidssimuleringar av de mindre beståndsdelarna i naturen, som till exempel gräs. Att implementera denna typ av simulering skulle bidra till en mer realistisk återgivning av verkligheten. I dagsläget läggs inte resurser på det här, då det kräver för mycket prestanda. I och med att beräkningar allt oftare flyttas från datorns processor till grafikkortet, kommer den här typen av simuleringar att öka. 1.2 Syfte Målet är att simulera ett realistiskt system bestående av gräs som påverkas av vind och gravitation. Simuleringen skall utföras i realtid och vindens parametrar ändras interaktivt. Parametrarna som justeras är bland annat vindens riktning och styrka. 1

Kapitel 2 Utvecklingsmiljö Systemet är skapat med hjälp av OpenGL (Open Graphics Library) och GLUT (OpenGL Utility Toolkit) då dessa är platsformsoberoende. Det senare är ett tilläggsbibliotek till OpenGL som sköter fönsterhantering samt in- och utmatning från mus och tangentbord. Till alla komponenter finns API:n för C++, vilket bidragit till att projektet utvecklats i C++. För att hantera olika versioner av programmet under utvecklingsperioden används git som är ett versionshanteringssystem. Projektets utveckling kan följas på hemsidan GitHub [2]. För att underlätta arbetet har färdiga funktioner använts, som är licensierade under fri licens. Till exempel vid inladdning av texturer samt vid terrängrendering. Funktionerna har dock modifierats för att passa in i projektet. 2

Kapitel 3 Fysik 3.1 Gräsmodell Uppbyggnaden av gräset är gjort i flera steg, se figur 3.1, där ett grässtrå består av ett antal segment. De fysikaliska beräkningarna utförs på varje enskilt segment med hänsyn till föregående segment. Kollisioner mellan grässtrån bortses, då ett enskilt grässtrås inverkan på ett annat är minimal i jämförelse med vindens inverkan. I varje grässtrå sparas en grundposition och en grundvinkel, därefter beräknas segmentens vinklar och positioner utifrån dessa. Denna beräkning sker utifrån en extern kraft, F, bestående av vind och gravitation. Segmenten innehåller en längd, r, och en massa, m, som används för att beräkna ett tröghetsmoment, I, enligt ekvation 3.1. I = mr2 3 (3.1) Figur 3.1: Gräsets uppbyggnad 3

3.2 Fysik i två dimensioner Först beräknas kraftens riktning för segmentet enligt ekvation 3.2, resultatet blir en vektor, u, med längden 1 som är ortogonal mot segmentet. u.x = cos α u.y = sin α (3.2) u.z = 0 Därefter beräknas styrkan på kraften, F r, längs med u enligt ekvation 3.3. F r = F u (3.3) Vridmomentet som påverkar segmentet fås genom ekvation 3.4, där r är segmentets längd och k fjader är en fjäderkonstant som approximerar segmentets spänst. Skillnaden mellan nuvarandeoch grundvinkeln, α och α 0, gör så att vridmomentet drar tillbaka segmentet till sitt ursprungsläge. τ = r 2 F r k fjader (α α 0 ) (3.4) Med hjälp av vridmomentet, τ, kan vinkelhastigheten, ω, beräknas med ekvation 3.5. Konstanten k friktion motsvarar luftmotstånd och styvhet i grässtrået. ω = k friktion τ dt (3.5) I Segmentets vinkel kan till slut beräknas genom att integrera vinkelhastigheten, ekvation 3.6. α = ω dt (3.6) Ekvationerna 3.5-3.6 kan istället beskrivas som en dubbelintegral enligt ekvation 3.7 α = k friktion τ dtdt (3.7) I Vinkeln, samt föregående segmentets position, x n 1, används därefter i ekvation 3.8 för att uppdatera segmentets position x n. x n = x n 1 + rcos(α) y n = y n 1 + rsin(α) (3.8) z n = z n 1 3.3 Fysik i tre dimensioner En naturlig utökning till den tvådimensionella fysiken är att låta gräset röra sig i tre dimensioner. Detta görs genom att gräsets vridning i XZ-planet, β, approximeras som att den rör sig mot vindens riktning i XZ-planet, θ v. Beräkningen för detta visas i ekvation 3.9. Konstanten k vrid approximerar friktionen då gräset vrider sig mot vinden. β = β + k vrid (θ v β); (3.9) 4

Den nya positionen för segmentet beräknas sedan med hjälp av ekvation 3.10, som utgår från ekvation 3.8 och utökar ekvationen med vinkeln i XZ-planet. x n = x n 1 + rcos(α)sin(β) y n = y n 1 + rsin(α) (3.10) z n = z n 1 + rcos(α)cos(β) 5

Kapitel 4 Numerisk simulering Till en början gjordes simuleringen med Eulers stegmetod, eftersom det är den enklaste av de numeriska metoderna. Metoden visas i ekvation 4.1 där värdet i nästa tidssteg, y k+1, beräknas med hjälp av värdet på det nuvarande tidssteget, y k, derivatans värde, f(t k, y k ), samt steglängden h k. y k+1 = y k + f(t k, y k )h k (4.1) För att minska eventuella numeriska problem används istället ekvation 4.2 som är en förbättrad Euler-metod. Denna tar hänsyn till värden i två tidssteg vilket leder till en bättre anpassning till den exakta lösningen, vilket visas i figur 4.1. Den förbättrade metoden är dock mer beräkningstung än sin föregångare. k 1 k 2 = f(t k, y k )h k = f(t k+1, y k+k1 )h k y k+1 = y k + k 1+k 2 2 (4.2) Eulers stegmetod är en numerisk metod av första ordningen och den förbättrade metoden är av andra ordningen. För att ytterligare förbättra de numeriska beräkningarna kan metoder av högre ordning användas. Runge-Kutta är en sådan metod, där fler derivator ingår i beräkningen. Eftersom inga numeriska problem uppstod, implementerades ingen metod av högre ordning då dessa är mer beräkningstunga än metoder av andra ordningen. Figur 4.1: Jämförelse av numeriska metoder. Bildkälla: [1] 6

Kapitel 5 Vindsimulering Implementationen av vindsimulering representerades från början av en kraftvektor för varje grässtrå. Denna metod är dock inte optimal då det verkliga systemet är svårsimulerat i sfäriska koordinater, vridning i horisontell led ser felaktig ut. En lättare form av vindrepresentation är att beskriva vinden som en vinkel och en styrka, detta används istället i beräkningarna. Vid större simulationer krävs mycket processorkraft för att beräkna vinddatan, därför behövs någon form av areaindelning där vinden beräknas för en yta istället för enskilda grässtrån. 5.1 Areaindelning För att spara processorkraft delas terrängen upp i areaytor. Beräkningen av vinden sker antingen en gång för varje yta eller för varje grässtrå på ytan. Detta bestäms med hjälp av olika avståndsbedömningar. Vid ytor nära kameran där skillnaden i rörelse är stor mellan närliggande grässtrån beräknas vinden enskilt för varje grässtrå. För ytor som ligger långt bort från kameran eller vindcentrum beräknas vinddatan endast en gång per yta. Storleken på ytorna bestäms av användaren, datorer med låg prestanda bör använda större ytor. 5.2 Vindtyper För att testa de dynamiska egenskaperna i simuleringen krävs olika typer av vind. I detta system testas lugn vindbris, vind från ovan så som orsakad av en helikopter, tornado samt riktad vind där parametrarna ändras interaktivt. Vindstyrka och vinkel beräknas som en funktion av gräsets baskoordinater samt avståndet, L, från vindcentrum. Beräkningen för styrka och vinkel vid vind från ovan ser ut som i ekvation 5.1 och 5.2, i ekvation 5.2 används avståndet, L, samt en konstant, C, för att reglera förändringen i vindstyrka. arctan( z ) om x > 0 och z 0 x arctan( z ) + 2π om x > 0 och z < 0 x arctan( z θ V = ) + π om x < 0 x π om x = 0 och z > 0 2 3π om x = 0 och z < 0 2 0 om x = 0 och z = 0 (5.1) 7

F V = C( 1 L ) (5.2) Vindberäkningarna för tornado görs på liknande sätt, skillnaden är att vinkeln beräknas som tangent mot vindcentrum. 8

Kapitel 6 Rendering Trots att fysiken fungerar bra krävs det ytterligare metoder för att göra resultatet trovärdigt. Något som förstärker trovärdigheten är till exempel ljussättning, texturering och rätt modellering. Gräset måste även placeras med olika täthet i en naturtrogen miljö med höjdskillnader. All rendering sker med hjälp av OpenGL, fönsterhanteringen sköts via GLUT. 6.1 Modellering Gräset består, som nämnts tidigare, av segment. Varje segment renderas som en rektangulär yta med en grundbredd. Hela gräset är alltså rektangulärt men genom texturering justeras gräsets form. Figur 6.1: Modellerat grässtrå 6.2 Ljussättning OpenGL har färdiga ljusfunktioner för att ljussätta en scen. I denna simulering används ett spot-ljus med inställd placering, riktning och styrka. 9

6.3 Texturering Textureringen som används är en bitmapstextur med alfakanal. För att ladda in en textur används en extern inladdningsmetod [3]. Från början hanterade metoden endast 24/8/4/1 bitars bitmapsbilder. Eftersom en alfakanal tar åtta bitar extra i utrymme har denna metod modifierats för att kunna ta in 32 bitars bitmapsfiler. OpenGL har funktioner för att använda inladdade texturer och placera ut dessa på objekt. Textureringen sker med så kallad MIP mapping (MIP från latinska multum in parvo). Denna metod går ut på att använda olika upplösningar på texturerna beroende på objektens storlek i scenen. Figur 6.2: Textur med alfakanal 6.4 Heightmap och densitymap För att modellera terrängen används en heightmap. Det vill säga en gråskalebild där mörka partier representerar låg höjd i terrängen och ljusa partier representerar hög höjd. Gråskalebilden stegas igenom, punkterna lagras och används för att rita upp en terräng bestående av triangulära polygoner. Terrängrenderingen utgår från öppen källkod [4] men har modifierats för att passa in i projektet. På liknande sätt som i Rendering Grass in Real Time with Dynamic Lighting [5] används en gråskalebild som densitymap, där mörkare partier representerar mindre täthet av grässtråna. Ur denna fås ett täthetsvärde över ett visst område. Detta värde multiplicerat med ett maxvärde bestämmer hur många grässtrån som ska placeras ut över respektive område. Figur 6.3: Renderad terräng 10

Kapitel 7 Körinstruktioner och systemkrav För att navigera i rymden används tangentbord och mus. Vinden styrs av tangentbordet. En full lista av kontroller följer i tabell 7.1. Tabell 7.1: Kontroller Kontroller Kommando Kamerastyrning W Flytta framåt A Flytta sidled vänster S Flytta bakåt D Flytta sidled höger Musklick + dra Rotera i rymden Vindstyrning T Tornado B Bris H Helikopter N Riktad 8 Öka vindstyrka 2 Minska vindstyrka 4 Ändra vindrotation motsols 6 Ändra vindrotation medsols 7 Flytta vindcentrum negativ z-led 9 Flytta vindcentrum positiv z-led 1 Flytta vindcentrum negativ x-led 3 Flytta vindcentrum positiv x-led 0 Nollställ vindcentrum För att programmet ska köras så bra som möjligt, rekommenderas systemet i tabell 7.2. Programmet fungerar även för system med sämre prestanda men justering av antal grässtrån måste göras och där med minskar den upplevda kvaliteten. 11

CPU Grafikkort Minne Hårddiskutrymme OS Tangentbort och Mus Tabell 7.2: Rekommenderat system 2.67 GHz GeForce GTS 250 1024 MB 3072 MB 1.5 MB Windows, Mac OS, Linux Figur 7.1: Renderad miljö med vind av typ tornado applicerad. 12

Kapitel 8 Resultat och diskussion 8.1 Resultat Projektetets resultat är ett körbart program där man i realtid kan se ett gräsfält som rör sig i vinden. Tanken med resultatet är att det ska kunna användas i ett spel som en del av miljön och därigenom ge ett mer verkligt intryck. I simuleringen påverkas gräset av gravitation och vind. Där kan vinden manipuleras genom att välja olika vindtyper samt dess styrka och riktning. Gräsfältet växer på en kuperad terräng som är indelad i 1024 delar. Varje del innehåller mellan 0 och 15 grässtrån som i sin tur består av tre segement. Dessa inställningar är baserade på utförda tester redovisade i tabell 8.1. Inställningarna är inte optimala ur beräkningssynpunkt men ger ett estetiskt tilltalande resultat som kan ses i figur 7.1. Tabell 8.1: Uppdateringsfrekvens (FPS) FPS Antal grässtrån Texturer Vindtyp Segment 49 6 750 På Helikopter 3 25 13 500 På Helikopter 3 19 18 000 På Helikopter 3 20 18 000 Av Helikopter 3 29 18 000 På Riktad 3 20 18 000 På Tornado 3 24 18 000 På Bris 3 44 18 000 På Helikopter 1 26 18 000 På Helikopter 2 19 18 000 På Helikopter 3 14 18 000 På Helikopter 4 12 18 000 På Helikopter 5 8.2 Diskussion 8.2.1 Förslag på förbättringar För att kunna utöka antalet grässtrån och storleken på terrängen krävs det ytterligare optimering av koden. Detta kan till exempel göras genom att flytta beräkningar från datorns processor till grafikkortets processenhet genom att använda CUDA (Compute Unified Device Architecture) 13

eller OpenCL (Open Computing Language). Vidare optimering av prestanda kan göras genom att införa grader av detaljnivåer (eng: Level of detail). Beroende på avståndet från betraktaren används olika modeller och vid långa avstånd ritas endast ett texturplan ut. För att visuellt förbättra utseendet av gräsfältet kan till exempel skuggor, himmel eller andra objekt läggas till i scenen. Detta kan dock påverka prestandan negativt. 8.2.2 Svårigheter Det som har varit svårast var att implementera fysiken i tre dimensioner. Dels på grund av att olika koordinatsystem används i ekvationer för polära koordinater och i OpenGL, dels på grund av att det var svårt att modellera systemet så att det stämde överens med verkligheten. Ett genomgående problem har varit att få vinklarna i systemet att motsvara vinklar i verkligheten. Speciellt när vinklar har befunnit sig runt noll grader. Det var även några svårigheter vid textureringen, till exempel att ladda in texturen med en alfakanal från en bildfil. 14

Litteraturförteckning [1] Alexandrov O. Numerical integration illustration; 2007. http://en.wikipedia. org/wiki/file:numerical_integration_illustration,_h%3d1.png. Hämtad: 10 mars, 2010. [2] 3 G. Versionshantering av projektet martnu/grass; 2010. http://github.com/ martnu/grass. Skapad: 20 januari, 2010. [3] Backhouse C. BMP Loader. Chris s Page: OpenGL, GLUT, C++, my Bitmap Loader. and more!; 2006. http://users.ox.ac.uk/~orie1330/bmploader.html. Hämtad: 20 februari, 2010. Hemsida. [4] Sempe L. Terrain Rendering using Heightmaps. Datorgrafik. 2002;http://www. spheregames.com/download.php?name=terrain_pdf. Hämtad: 28 februari, 2010. [5] Kevin Boulanger KB Sumanta N Pattanaik. Rendering Grass in Real Time with Dynamic Lighting. Datorgrafik. 2009 januari/februari;p. 37. 15