I just need some better understanding of what is being said here…
like:
[java]
package jme3test.helloworld;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.renderer.Camera;
import com.jme3.terrain.geomipmap.TerrainLodControl;
import com.jme3.terrain.heightmap.AbstractHeightMap;
import com.jme3.terrain.geomipmap.TerrainQuad;
import com.jme3.terrain.heightmap.HillHeightMap; // is used in example 2
import com.jme3.terrain.heightmap.ImageBasedHeightMap;
import com.jme3.texture.Texture;
import com.jme3.texture.Texture.WrapMode;
import java.util.ArrayList;
import java.util.List;
import jme3tools.converters.ImageToAwt;
public class HelloTerrain extends SimpleApplication {
private TerrainQuad terrain;
Material mat_terrain;
public static void main(String[] args) {
HelloTerrain app = new HelloTerrain();
app.start();
}
@Override
public void simpleInitApp() {
flyCam.setMoveSpeed(50);
/** 1. Create terrain material and load four textures into it. /
mat_terrain = new Material(assetManager, "Common/MatDefs/Terrain/Terrain.j3md");
/* 1.1) Add ALPHA map (for red-blue-green coded splat textures) /
mat_terrain.setTexture("Alpha",
assetManager.loadTexture("Textures/Terrain/splat/alphamap.png"));
/* 1.2) Add GRASS texture into the red layer (Tex1). /
Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg");
grass.setWrap(WrapMode.Repeat);
mat_terrain.setTexture("Tex1", grass);
mat_terrain.setFloat("Tex1Scale", 64f);
/* 1.3) Add DIRT texture into the green layer (Tex2) /
Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg");
dirt.setWrap(WrapMode.Repeat);
mat_terrain.setTexture("Tex2", dirt);
mat_terrain.setFloat("Tex2Scale", 32f);
/* 1.4) Add ROAD texture into the blue layer (Tex3) /
Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg");
rock.setWrap(WrapMode.Repeat);
mat_terrain.setTexture("Tex3", rock);
mat_terrain.setFloat("Tex3Scale", 128f);
[/java]
Where does it get the four textures, or am i missing something…
[java]
/* 2. Create the height map /
final Texture heightMapImage =
assetManager.loadTexture("Textures/Terrain/splat/mountains512.png");
final AbstractHeightMap heightmap =
new ImageBasedHeightMap(
ImageToAwt.convert(
heightMapImage.getImage(), false, true, 0));
heightmap.load();
[/java]
what is mountain512.png and what just happened right here.
[java]
/* 3. We have prepared material and heightmap. Now we create the actual terrain:
- 3.1) We create a TerrainQuad and name it "my terrain".
- 3.2) A good value for terrain tiles is 64x64 – so we supply 64+1=65.
- 3.3) We prepared a heightmap of size 512x512 – so we supply 512+1=513.
- 3.4) As LOD step scale we supply Vector3f(1,1,1).
- 3.5) At last, we supply the prepared heightmap itself.
/
terrain = new TerrainQuad("my terrain", 65, 513, heightmap.getHeightMap());
/* 4. We give the terrain its material, position & scale it, and attach it. /
terrain.setMaterial(mat_terrain);
terrain.setLocalTranslation(0, -100, 0);
terrain.setLocalScale(2f, 1f, 2f);
rootNode.attachChild(terrain);
[/java]
Is this the part that creates the mountains?
[java]
/* 5. The LOD (level of detail) depends on were the camera is: */
List<Camera> cameras = new ArrayList<Camera>();
cameras.add(getCamera());
TerrainLodControl control = new TerrainLodControl(terrain, cameras);
terrain.addControl(control);
and this part just justifies what the camera is looking at i presume
}
}
[/java]
I got through most of the parts with relative ease, until i got to this, and it confused me. If anyone could help me get a better understanding it would be appreciated!