Fredrik Danielsen / Student 2002
Å tegne:>Terreng

Terreng- og landskapsgenerering

Hva
terreng
Slik kan det se ut tidlig i prosessen.
Et ganske omfattende prosjekt for å lage landskaper

En innføring i hvordan generere terreng og landskap med openGL. Modulen skal først og fremst vise metoder for hvordan generere naturtro landskap med fjell og daler. I utgangspunktet skal det ikke tas stor høyde for ytelse og akselerasjon ved rendring.

En tutorial som først del tar for seg tre viktige deler i modelleringen av landskap: bakke, vann og himmel. For at det hele skulle se naturtro ut er det lagt teksturer på flatene.

Den andre delen av denne modulen fokuserer på akselerasjon ved rendring av opptegning av store landskap. Her går jeg in på bruk av displaylister og en akselerasjonsteknikk kalt "Frustum culling".

Oversikt

Høydekart - en innføring i hvordan bygge såkalte høydekart. Dette er utgangspunktet for å generere fjell og daler på terrenget, og bølger på vannet.

  • Gråskalabilder - en innføring i hvordan bruke gråskala bilder for å generere høydeforskjeller på terrenget.
  • Glatting - en innføring i hvordan terrenget kan glattes for å unngå for skarpe kanter
  • Normaler - en innføring i hvordan beregne normaler på flater med og uten interpolering

Vann - en innføring i hvordan generere en enkel, transparent vannoverflate

Himmel - en innføring i hvordan generere en enkel himmel-"sphere". En halvkule over terrenget med tekstur som himmel

Tekstur- en rask innføring i hvordan legge teksturer på flater

  • Koordinater - en innføring i hvordan finne teksturkoordinatene til en en flate som er bygd opp av flere polygoner
  • Generering av egne teksturer - en innføring i hvordan lage sin egen enkle tekstur som varierer med høydeforskjellene på terrenget

Displaylister - en enkel innføring i hvordan bruke display lister

Bilder- forskjellige bilder av forskjellige terreng med forskjellig teksturer

Resultatkoden

Resultatet av koden har blitt en "terreng-motor" hvor funksjoner som størrelse, forskjellige teksturer, bakgrunnsfarge, vannlinje, bølgestørrelse osv. kan sendes som parametere til en konstruktør i klassen "Terreng.java" og bruker kan på den måten forandre terrenget til akkurat det en selv ønsker. Pseudo-koden til konstruktøren som tar imot parametrene ser sånn ut:

public Terreng(
               <Bredde(canvas)>,
               <Høyde(canvas)>,
               <Terreng-gråskalabilde>,
               <Vann-gråskalabilde>,
               <Vann høyde over bakken>,
               <Terrengets stride>,
               <Max bølgehøyde>,
               <Max fjellhøyde>,
               <Toppen av himmelkule>,
               <Nederst på himmelkule>,
               <Navn på tekstur bilder>,
               <Hvor mange ganger teksturen skal gjenntas>,
               <Egenlagd tekstur på terreng(true/false)>,
               <Tåke(true/false)>,
               <Bakgrunnsfarger>)
Referanser
  1. Terrain Tutorialwww.lighthouse3d.com/opengl/terrain/index.php3?introduction14-04-2010
  1. 3D Graphic Java: Render fractal landscapeswww.javaworld.com/javaworld/jw-08-1998/jw-08-step.html14-04-2010
  1. Latest 'NEHE' NewsNEHE, NeonHelium ProductionsOpenGL-tutorials.nehe.gamedev.net/14-03-2009

Kildekode

TerrengFrame.java TerrengFrame.java - JFrame klasse som legger på GLCanvas'en (openGL context) og sender parametere til Terreng.java klassen.
Terreng.java Terreng.java - en GLCanvas klasse som tar seg av opptegning av terrenget.
HeightField.java HeightField.java - klasse som tar seg av oppsett av høydekartet ved å legge inn koordinatene til høydekartet i en Array, og beregner teksturkoordiatene til høydekartet.
HeightImageLoader.java HeightImageLoader.java - klasse som henter pikselinformasjon fra et gråskala-bilde og manipulerer høydeverdiene til høydekartet (HeightField-klassen) ut i fra fargeverdien
Sphere.java Sphere.java - klasse som brukes til å beregne himmelen ut i fra størrelsen på terrenget og parametere fra bruker, og beregner teksturkoordinatene til himmelen.
Texture.java Texture.java - klasse som generer en tekstur ut i fra parametere fra bruker.
Normals.java Normals.java - en klasse som regner ut normal på flatene i et høydekart, interpolert eller ikke interpolert.
CloseWindowAndExit.java CloseWindowAndExit - en klasse som brukes av TerrengFrame.java for å lukke programmet ordentlig når vinduet blir lukket.
  • API-doc - en javagenerert dokumentasjon som viser alle klassene med metoder (de metodene som er public)
  • All kode, inklusive tekstur-bilder: alt.zip.
Vedlikehold
  • Skrevet av Fredrik Danielsen, student 2002
  • Redaksjonell tilpassing,Børre Stenseth juni 2002
(Velkommen) Å tegne:>Terreng (Høydekart)