|
@@ -64,6 +64,26 @@ import java.util.logging.Level;
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
/**
|
|
|
+ * <p>
|
|
|
+ * TerrainQuad is a heightfield-based terrain system. Heightfield terrain is fast and can
|
|
|
+ * render large areas, and allows for easy Level of Detail control. However it does not
|
|
|
+ * permit caves easily.
|
|
|
+ * TerrainQuad is a quad tree, meaning that the root quad has four children, and each of
|
|
|
+ * those children have four children. All the way down until you reach the bottom, the actual
|
|
|
+ * geometry, the TerrainPatches.
|
|
|
+ * If you look at a TerrainQuad in wireframe mode with the TerrainLODControl attached, you will
|
|
|
+ * see blocks that change their LOD level together; these are the TerrainPatches. The TerrainQuad
|
|
|
+ * is just an organizational structure for the TerrainPatches so patches that are not in the
|
|
|
+ * view frustum get culled quickly.
|
|
|
+ * TerrainQuads size are a power of 2, plus 1. So 513x513, or 1025x1025 etc.
|
|
|
+ * Each point in the terrain is one unit apart from its neighbour. So a 513x513 terrain
|
|
|
+ * will be 513 units wide and 513 units long.
|
|
|
+ * Patch size can be specified on the terrain. This sets how large each geometry (TerrainPatch)
|
|
|
+ * is. It also must be a power of 2 plus 1 so the terrain can be subdivided equally.
|
|
|
+ * </p>
|
|
|
+ * <p>
|
|
|
+ * The height of the terrain can be modified at runtime using setHeight()
|
|
|
+ * </p>
|
|
|
* <p>
|
|
|
* A terrain quad is a node in the quad tree of the terrain system.
|
|
|
* The root terrain quad will be the only one that receives the update() call every frame
|
|
@@ -112,13 +132,25 @@ public class TerrainQuad extends Node implements Terrain {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- *
|
|
|
+ * Creates a terrain with:
|
|
|
+ * <ul>
|
|
|
+ * <li>the total, real-world, size of the terrain</li>
|
|
|
+ * <li>the patchSize, or the size of each geometry tile of the terrain</li>
|
|
|
+ * <li>the heightmap that defines the height of the terrain</li>
|
|
|
+ * </ul>
|
|
|
+ * <p>
|
|
|
+ * A TerrainQuad of totalSize 513x513 will be 513 units wide and 513 units long.
|
|
|
+ * PatchSize is just used to subdivide the terrain into tiles that can be culled.
|
|
|
+ * </p>
|
|
|
* @param name the name of the scene element. This is required for
|
|
|
* identification and comparison purposes.
|
|
|
- * @param patchSize size of the individual patches
|
|
|
- * @param totalSize the size of this entire terrain tree (on one side)
|
|
|
+ * @param patchSize size of the individual patches (geometry). Power of 2 plus 1,
|
|
|
+ * must be smaller than totalSize. (eg. 33, 65...)
|
|
|
+ * @param totalSize the size of this entire terrain (on one side). Power of 2 plus 1
|
|
|
+ * (eg. 513, 1025, 2049...)
|
|
|
* @param heightMap The height map to generate the terrain from (a flat
|
|
|
- * height map will be generated if this is null)
|
|
|
+ * height map will be generated if this is null). The size of one side of the heightmap
|
|
|
+ * must match the totalSize. So a 513x513 heightmap is needed for a terrain with totalSize of 513.
|
|
|
*/
|
|
|
public TerrainQuad(String name, int patchSize, int totalSize, float[] heightMap) {
|
|
|
this(name, patchSize, totalSize, Vector3f.UNIT_XYZ, heightMap);
|