Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Relevanta dokument
Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Procedurell renderingsmotor i Javascript och HTML5

Procedurell Terräng med LOD i OpenGL 4

Procedurell stad. Projekt i kursen TNM022 Procedurella metoder för bilder. Tobias Heldring, tobhe

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

Procedurell 3D-eld på grafikkortet

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

Grafiska pipelinens funktion

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Programmering B med Visual C

Datastrukturer och Algoritmer D0041D

The Procedural Arctic

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

Objektorientering i liten skala

I rastergrafikens barndom...gjorde man grafik genom att skriva i ett videominne. Operationer på buffert och pixlar. Idag... Varför grafikkort?

Kravspecifikation. TDP005 Projekt: objektorienterade system. Version 4.0 Datum Anna Ahlberg Johan Almberg

Kapitel 17 Delritning... 3

Kravspecifikation TDP005 Projekt: Objektorienterat system

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Mitt hus och jag steg för steg instruktioner

Inledning. Kapitel Bakgrund. 1.2 Syfte

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

Projektdokumentation för Othello

Information Coding / Computer Graphics, ISY, LiTH. Compute shaders!! Framtiden för GPU computing eller sen efterapning av Direct Compute?

Fyra i rad Javaprojekt inom TDDC32

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

Min pool. Hanna Lind 7:2 Alfa

Tentamen Datastrukturer (DAT036)

Slumpmässigt Genererade Nivåer

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

Redogörelse för utvecklingsprocessen av spelet The Legend of Chalmers

Teknikprogrammet, inriktning informations- och medieteknik

TDP005 Projekt: Objektorienterat system

HAND TRACKING MED DJUPKAMERA

TAIU07 Matematiska beräkningar med Matlab

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

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Konturbearbetning 1. Innehåll

Teknik för avancerade datorspel!

Fönster och dörr. Kapitel 3 - Fönster och dörr... 3

Människans möte med den mänskliga kroppen. Ett pedagogiskt studiematerial

Trepoängsproblem. Kängurutävlingen 2011 Junior

Universe Engine Rapport

Objektorienterad Programkonstruktion

Golv, Tapeter, och andra Mönster

Bygga hus med LECA-stenar

i LabVIEW. Några programmeringstekniska grundbegrepp

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

LiTH. WalkCAM 2007/05/15. Testrapport. Mitun Dey Version 1.0. Status. Granskad. Godkänd. Reglerteknisk projektkurs WalkCAM LIPs

Exempel på hur man kan bygga enkla former i Illustrator

Teknik för avancerade datorspel!

Känguru 2013 Student sida 1 / 7 (gymnasiet åk 2 och 3)

Känguru 2016 Cadet (åk 8 och 9)

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

Gränssnitt för FakeGranska. Lars Mattsson

Andragradsekvationer möter elever under sitt första år på gymnasiet.

4-4 Parallellogrammer Namn:..

Algoritmer. Två gränssnitt

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Tentamen Datastrukturer (DAT036)

Sommarstugan Övningar för CAD2

EXTRA UPPGIFTER I C++ PROGRAMMERING-A

Värmedistribution i plåt

Avdelning 1, trepoängsproblem

Rita ett rum i en-punktsperspektiv.

Känguru 2016 Student gymnasieserien

TDDD92 Artificiell intelligens -- projekt

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

Programmeringsolympiaden 2014

TAIU07 Matematiska beräkningar med Matlab

Föreläsning 2. Operativsystem och programmering

PROCEDURELLT GENERERADE BANOR MED HÖJDSKILLNADER OCH BRA FRAMKOMLIGHET PROCEDURALLY GENERATED MAPS WITH HEIGHT DIFFERENCE AND GOOD EXPLORATION

Avdelning 1, trepoängsproblem

Ekvivalensrelationer

Delprov D: Geometriska figurer och deras egenskaper

4.2.4 Flanktransmission

Handbok för källarprodukter. Hitta lösningen för din källare

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

Tynker gratisapp på AppStore

Genetisk programmering i Othello

SF1624 Algebra och geometri Lösningsförslag till tentamen DEL A

Agenda. Introducera det individuella projekt Multipla C-filer H-filer Introducera uppgifterna

Föreläsning 1: Introduktion till kursen

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Slump och statistik med Scratch

Mintermer. SP-form med tre mintermer. William Sandqvist

HI1024 Programmering, grundkurs TEN

Grafiska pipelinen. Edvin Fischer

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

Mer om kontinuitet. Kapitel K. K.1 Övre och undre gräns

IE1205 Digital Design: F4 : Karnaugh-diagrammet, två- och fler-nivå minimering

Bearbetning av 2D-Detalj

KOMMA IGÅNG MED ARCHICAD. Idé och produktion av: Oscar Torstensson

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

Slutrapport YUNSIT.se Portfolio/blogg

PROGRAMMERING I MATEMATIK. Ämnets dag 2017 Göteborgs universitet, Matematiska Vetenskaper Åse Fahlander och Laura Fainsilber

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning Datastrukturer (DAT037)

Transkript:

Procedurella Grottor TNM084 Alexander Steen alest849@student.liu.se 13-01-12 Sammanfattning Denna rapport beskriver en metod för att skapa procedurella grottor. Grottorna består utav sammanlänkade rum som byggs ut från ett startrum med hjälp av en algoritm. Resultatet är två program, ett i 2D och ett i 3D som båda låter användaren gå runt i dessa grottor.

Contents Introduktion... 3 Metod och genomförande... 3 Resultat... 4 Diskussion... 6 2

Introduktion Att skapa nivåer till t.ex. datorspel med procedurella metoder är ett bra alternativ när detaljerna på nivåerna inte är lika viktiga som nivån i helhet. En grotta med en gömd skatt i behöver kanske inte ha en planlösning som är planerad in i minsta detalj. En av fördelarna med procedurellt skapade nivåer är möjligheten att snabbt ändra några variabler och kunna få ett väldigt annorlunda utseende. Metod och genomförande Det finns olika metoder för att skapa dessa sammanlänkade rum som använder mer eller mindre avancerade algoritmer som alla ger olika utseende på grottorna. Den implementerade algoritmen är en relativt intuitiv lösning och kan delas upp i 4 steg. Steg 1 Först skapas ett rum med slumpade dimensioner. Detta rum utgör startpunkten för hela grottan. Steg 2 En av väggarna i ett rum samt en position på denna vägg väljs ut. Genom att bestämma hur algoritmen väljer vilket rum som nästa rum ska byggas ut ifrån går det att få olika utseenden på grottan. Exempel på detta kommer att ges senare. Steg 3 Dimensioner för ett nytt rum slumpas och utrymmet bakom väggen kontrolleras för att se om det finns plats att skapa ett nytt rum. Steg 4 Om det finns plats, placera ut det nya rummet och gå sedan till steg 2. Om det inte finns plats, gå direkt till steg 2. Algoritmen implementerades först i 2D i programmeringsspråket Blitz Basic. Blitz Basic är ett BASICbaserat språk specialiserat för spelprogrammering och tillhandahåller lättanvända funktioner för det mesta relaterat till grafik och interaktion. Programmet har en tvådimensionell array med heltal som beskriver hela grottan(figur 1). Detta gör det lätt att göra t.ex. kollisionskontroller mellan väggar och spelaren. Figur 1. Den tvådimensionella arrayen innehållandes grottan 1 - Vägg 2 - Golv 3

Själva rummen sparas var för sig i en dubbellänkad lista och består utav en bild som skapas i Steg 4. Varje rum har både en position i arrayen och en skärmposition som används vid utritningen av rummet. Efter algoritmen var implementerad i 2D gjordes en implementation i C++ och OpenGL med Vertex Buffer Objects och GLSL. Strukturen på grottan är samma som i 2D-fallet men varje rum har nu sin position i arrayen, sina dimensioner och position och riktning på ingång och utgång sparade. Alla rum sparas som i 2D-fallet i en dubbellänkad lista. Denna lista stegas sedan igenom och varje rums data används för att skapa vertex- och triangellistorna. En enkel shader med simplex noise används för att ge rummen en stenliknande textur. Resultat Både 2D- och 3D-implementationen kommer, när de körs, att försöka gå igenom de fyra stegen ett fördefinerat antal gånger. Det kan hända att algoritmen bygger in sig i ett hörn vilket innebär att det inte finns plats att placera ut något rum på någon sida då det antingen redan finns rum där eller det är i kanten av arrayen. Detta medför att det inte går att definera hur många rum grottan ska ha exakt utan endast ett största värde på antal rum. Figur 2 visar ett exempel på en liten grotta i 2D. Rummet med den blåa rektangeln i är det sista rummet och det går att se hur algoritmen har byggt in sig då den enda riktningen som inte har rum ivägen är uppåt men i detta fallet så tar arrayen slut där. Den röda cirkeln är spelaren och går att flytta runt i grottan. Figur 2. Exempel på grotta i 2D I grottan från figur 2 valdes alltid det senaste rummet i steg två. Detta ger en linjär grotta där varje rum som mest bara har en ingång och en utgång. Att istället låta algoritmen slumpmässigt välja ut ett rum att bygga ut ifrån ger en grotta med sidogånger och återvändsgränder som går att se i figur 3. 4

Figur 3.Grotta med flera möjliga gångvägar Ett alternativ för att få riktigt svårnavigerade grottor är att istället för att bara välja ett slumpmässigt rum att bygga utifrån låta algoritmen försöka bygga ett nytt rum från var och ett av de hittills skapade rummen. Detta kommer att ge en väldigt tät grotta då de flesta rum kommer att ha flera rum intill sig. Ett exempel som använder denna metod går att se i figur 4. Figur 4. Grotta där algoritmen försökt att bygga ett nytt rum för alla redan existerande rum 5

Figur 5 är från implementationen i OpenGL och visar insidan av ett rum med ingången och utgången på samma vägg. Figur 5. Grotta i 3D implementerad i OpenGL 2D-implementationen fungerar bara i Windows då Blitz Basic använder sig av DirectX medan 3Dimplementationen ska fungera i både Windows och Linux. Diskussion Implementationen i 3D skapar alltid ett nytt rum från det senast skapade rummet. Detta på grund av strukturen på programmet. Varje rum består utav 20 punkter(8 för hörnen på rummet, 2x4 punkter för ingång och utgång och 2x2 punkter i taket ovanför punkterna för ingång och utgång. Figur 6). Figur 6. Strukturen för rummen i 3D Detta medför att det inte går att lägga till en extra utgång på samma sätt som i 2D-fallet där det går bra att bara rita om bilden för att få en ny utgång. För att kunna göra det i 3D skulle det behövas antingen fler punkter på varje vägg som används vid behov eller en annan lösning på hur rummen skapas(t.ex. voxlar). 6