Hi everyone,
I’m doing some tests with jme3-terrain
library. I’m studying the test-cases found in the jme3-examples
project.
In particular, I am interested in these three examples:
Suppose all TerrainGrids
have a TerrainGridListener
.
terrain.addListener(new TerrainGridListener() {
@Override
public void gridMoved(Vector3f newCenter) {
}
@Override
public void tileAttached(Vector3f cell, TerrainQuad quad) {
while(quad.getControl(RigidBodyControl.class)!=null){
quad.removeControl(RigidBodyControl.class);
}
quad.addControl(new RigidBodyControl(new HeightfieldCollisionShape(quad.getHeightMap(), terrain.getLocalScale()), 0));
bulletAppState.getPhysicsSpace().add(quad);
}
@Override
public void tileDetached(Vector3f cell, TerrainQuad quad) {
if (quad.getControl(RigidBodyControl.class) != null) {
bulletAppState.getPhysicsSpace().remove(quad);
quad.removeControl(RigidBodyControl.class);
}
}
});
Question 1:
How do I save the texture generated by the FilteredBasis
to a png file?
FractalSum base = new FractalSum();
base.setRoughness(0.7f);
base.setFrequency(1.0f);
base.setAmplitude(1.0f);
base.setLacunarity(2.12f);
base.setOctaves(8);
base.setScale(0.02125f);
base.addModulator(new NoiseModulator() {
@Override
public float value(float... in) {
return ShaderUtils.clamp(in[0] * 0.5f + 0.5f, 0, 1);
}
});
FilteredBasis ground = new FilteredBasis(base);
PerturbFilter perturb = new PerturbFilter();
perturb.setMagnitude(0.119f);
OptimizedErode therm = new OptimizedErode();
therm.setRadius(5);
therm.setTalus(0.011f);
SmoothFilter smooth = new SmoothFilter();
smooth.setRadius(1);
smooth.setEffect(0.7f);
IterativeFilter iterate = new IterativeFilter();
iterate.addPreFilter(perturb);
iterate.addPostFilter(smooth);
iterate.setFilter(therm);
iterate.setIterations(1);
ground.addPreFilter(iterate);
TerrainGrid terrain = new TerrainGrid("terrain", 33, 129, new FractalTileLoader(ground, 256f));
(eg: see the png files contained in the TerrainGridTestData.zip file).
If I understand correctly, the textures should have dimensions equal to powers of 2: 128x128, 256x256, 512x512 …
I would like to use them with the ImageTileLoader
class like this example.
TerrainGrid terrain = new TerrainGrid("terrain", 65, 257, new ImageTileLoader(assetManager, new Namer() {
@Override
public String getName(int x, int y) {
return "Scenes/TerrainMountains/terrain_" + x + "_" + y + ".png";
}
}));
Question 2:
how do I save the TerrainQuad
generated on j3o file? I would like to use them with the AssetTileLoader
class like in this example.
AssetTileLoader tileLoader = new AssetTileLoader(assetManager, "testgrid", "TerrainGrid");
TerrainGrid terrain = new TerrainGrid("terrain", 65, 257, tileLoader);
Question 3:
How can I view the parameters configured for a FilteredBasis
in image format?
FractalSum base = new FractalSum();
base.setRoughness(0.7f);
base.setFrequency(1.0f);
base.setAmplitude(1.0f);
base.setLacunarity(2.12f);
base.setOctaves(8);
base.setScale(0.02125f);
base.addModulator(new NoiseModulator() {
@Override
public float value(float... in) {
return ShaderUtils.clamp(in[0] * 0.5f + 0.5f, 0, 1);
}
});
FilteredBasis ground = new FilteredBasis(base);
PerturbFilter perturb = new PerturbFilter();
perturb.setMagnitude(0.119f);
OptimizedErode therm = new OptimizedErode();
therm.setRadius(5);
therm.setTalus(0.011f);
SmoothFilter smooth = new SmoothFilter();
smooth.setRadius(1);
smooth.setEffect(0.7f);
IterativeFilter iterate = new IterativeFilter();
iterate.addPreFilter(perturb);
iterate.addPostFilter(smooth);
iterate.setFilter(therm);
iterate.setIterations(1);
ground.addPreFilter(iterate);
Here is an example image found in a previous post.
Before moving on to other libraries, I would like to start with the official one (jme3-terrain) kept in the engine core.
Thanks for your help