101 lines
3.3 KiB
Java
101 lines
3.3 KiB
Java
|
package jme3test.light;
|
||
|
|
||
|
import com.jme3.app.SimpleApplication;
|
||
|
import com.jme3.input.KeyInput;
|
||
|
import com.jme3.input.controls.ActionListener;
|
||
|
import com.jme3.input.controls.KeyTrigger;
|
||
|
import com.jme3.light.DirectionalLight;
|
||
|
import com.jme3.material.*;
|
||
|
import com.jme3.math.ColorRGBA;
|
||
|
import com.jme3.math.Quaternion;
|
||
|
import com.jme3.math.Vector3f;
|
||
|
import com.jme3.scene.Geometry;
|
||
|
import com.jme3.scene.Node;
|
||
|
import com.jme3.scene.Spatial;
|
||
|
import com.jme3.util.TangentBinormalGenerator;
|
||
|
import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
|
||
|
|
||
|
/**
|
||
|
* test
|
||
|
*
|
||
|
* @author normenhansen
|
||
|
*/
|
||
|
public class TestTangentSpace extends SimpleApplication {
|
||
|
|
||
|
public static void main(String[] args) {
|
||
|
TestTangentSpace app = new TestTangentSpace();
|
||
|
app.start();
|
||
|
}
|
||
|
|
||
|
private Node debugNode = new Node("debug");
|
||
|
|
||
|
@Override
|
||
|
public void simpleInitApp() {
|
||
|
renderManager.setSinglePassLightBatchSize(2);
|
||
|
renderManager.setPreferredLightMode(TechniqueDef.LightMode.SinglePass);
|
||
|
initView();
|
||
|
|
||
|
Spatial s = assetManager.loadModel("Models/Test/BasicCubeLow.obj");
|
||
|
rootNode.attachChild(s);
|
||
|
|
||
|
Material m = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
|
||
|
m.setTexture("NormalMap", assetManager.loadTexture("Models/Test/Normal_pixel.png"));
|
||
|
|
||
|
Geometry g = (Geometry)s;
|
||
|
Geometry g2 = (Geometry) g.deepClone();
|
||
|
g2.move(5, 0, 0);
|
||
|
g.getParent().attachChild(g2);
|
||
|
|
||
|
g.setMaterial(m);
|
||
|
g2.setMaterial(m);
|
||
|
|
||
|
//Regular tangent generation (left geom)
|
||
|
TangentBinormalGenerator.generate(g2.getMesh(), true);
|
||
|
|
||
|
//MikkTSPace Tangent generation (right geom)
|
||
|
|
||
|
MikktspaceTangentGenerator.generate(g);
|
||
|
|
||
|
createDebugTangents(g2);
|
||
|
createDebugTangents(g);
|
||
|
|
||
|
inputManager.addListener(new ActionListener() {
|
||
|
@Override
|
||
|
public void onAction(String name, boolean isPressed, float tpf) {
|
||
|
if (name.equals("toggleDebug") && isPressed) {
|
||
|
if (debugNode.getParent() == null) {
|
||
|
rootNode.attachChild(debugNode);
|
||
|
} else {
|
||
|
debugNode.removeFromParent();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}, "toggleDebug");
|
||
|
|
||
|
inputManager.addMapping("toggleDebug", new KeyTrigger(KeyInput.KEY_SPACE));
|
||
|
|
||
|
|
||
|
DirectionalLight dl = new DirectionalLight(new Vector3f(-1, -1, -1).normalizeLocal());
|
||
|
rootNode.addLight(dl);
|
||
|
}
|
||
|
|
||
|
private void initView() {
|
||
|
viewPort.setBackgroundColor(ColorRGBA.DarkGray);
|
||
|
cam.setLocation(new Vector3f(8.569681f, 3.335546f, 5.4372444f));
|
||
|
cam.setRotation(new Quaternion(-0.07608022f, 0.9086564f, -0.18992864f, -0.3639813f));
|
||
|
flyCam.setMoveSpeed(10);
|
||
|
}
|
||
|
|
||
|
private void createDebugTangents(Geometry geom) {
|
||
|
Geometry debug = new Geometry(
|
||
|
"Debug " + geom.getName(),
|
||
|
TangentBinormalGenerator.genTbnLines(geom.getMesh(), 0.8f)
|
||
|
);
|
||
|
Material debugMat = assetManager.loadMaterial("Common/Materials/VertexColor.j3m");
|
||
|
debug.setMaterial(debugMat);
|
||
|
debug.setCullHint(Spatial.CullHint.Never);
|
||
|
debug.getLocalTranslation().set(geom.getWorldTranslation());
|
||
|
debugNode.attachChild(debug);
|
||
|
}
|
||
|
}
|