Terreng- og landskapsgenerering
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>)
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. |