package org.pollux3d.glsl;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Vector3f;
import com.jme3.renderer.queue.RenderQueue.ShadowMode;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Sphere;
import com.jme3.texture.Texture;
import com.jme3.util.TangentBinormalGenerator;
public class GLSLTest1 extends SimpleApplication {
private float radius = 2f;
private Material mat;
private Geometry atmo;
@Override
public void simpleInitApp() {
Sphere atmoSphere = new Sphere(48, 48, radius, false, true);
mat = new Material(assetManager, "MatDefs/SimpleAtmoshere.j3md");
mat.setFloat("radius", radius);
atmo = new Geometry("atmo_Planet", atmoSphere);
Vector3f pos = new Vector3f(5,0,0);
atmo.setLocalTranslation(pos);
mat.setVector3("v3Center", pos);
atmo.setMaterial(mat);
rootNode.attachChild(atmo);
Sphere planetSphere = new Sphere(48, 48, radius * 0.8f);
Material planteMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
planteMat.setColor("Color", ColorRGBA.Green);
Geometry planet = new Geometry("geo_Planet", planetSphere);
planet.setLocalTranslation(pos);
planet.setMaterial(planteMat);
rootNode.attachChild(planet);
}
public static void main(String[] args) {
GLSLTest1 app = new GLSLTest1();
app.start();
}
@Override
public void simpleUpdate(float tpf) {
super.simpleUpdate(tpf);
Vector3f camLocation = getCamera().getLocation();
Material newMat = mat;
Vector3f planetLocation = Vector3f.ZERO;
newMat.setVector3("v3CameraPos", camLocation);
/*
float maxCamDistance = radius + planetLocation.subtract(camLocation).length();
newMat.setFloat("maxCamDistance", maxCamDistance);
float camToCenter = planetLocation.subtract(camLocation).length();
newMat.setFloat("minCamDistance", FastMath.sqrt(camToCenter*camToCenter + radius*radius));
*/
atmo.setMaterial(newMat);
}
}