This document discusses techniques for creating skyboxes and terrain in OpenGL graphics. It explains how to create a skydome using skybox textures and then generate terrain by mapping height data from a heightmap texture onto a grid and rendering it with additional textures. Methods are provided for scaling, translating and drawing the terrain as well as querying the heightmap to position the camera above the terrain. Advanced techniques discussed include using quad trees for efficient searching, multitexturing, adding detail textures, and raycasting against the terrain.
31. Terrain – Querying Height
MyCamera.Position.y = (float)(GetValue(
(int)((MyCamera.Position.x + initTerrainPositionX) * scaleX),
(int)((MyCamera.Position.z + initTerrainPositionZ) * scaleZ)
))
*scaleY
+15;
Getting the correspondent map height
at the camera’s current position
32. Terrain – Querying Height
MyCamera.Position.y = (float)(GetValue(
(int)((MyCamera.Position.x + initTerrainPositionX) * scaleX),
(int)((MyCamera.Position.z + initTerrainPositionZ) * scaleZ)
))
*scaleY
+15;
Compensate for any translation on X
and/or Z axis
33. Terrain – Querying Height
MyCamera.Position.y = (float)(GetValue(
(int)((MyCamera.Position.x + initTerrainPositionX) * scaleX),
(int)((MyCamera.Position.z + initTerrainPositionZ) * scaleZ)
))
*scaleY
+15;
Scale it by how much you scaled the
terrain on X and Z axis
34. Terrain – Querying Height
MyCamera.Position.y = (float)(GetValue(
(int)((MyCamera.Position.x + initTerrainPositionX) * scaleX),
(int)((MyCamera.Position.z + initTerrainPositionZ) * scaleZ)
))
*scaleY
+15;
And scale the y value in the height map
by how much the terrain is Y scaled
35. Terrain – Querying Height
MyCamera.Position.y = (float)(GetValue(
(int)((MyCamera.Position.x + initTerrainPositionX) * scaleX),
(int)((MyCamera.Position.z + initTerrainPositionZ) * scaleZ)
))
*scaleY
+15; And hover above the position a bit