|
|
@ -33,6 +33,10 @@ |
|
|
|
package jme3test.scene.instancing; |
|
|
|
package jme3test.scene.instancing; |
|
|
|
|
|
|
|
|
|
|
|
import com.jme3.app.SimpleApplication; |
|
|
|
import com.jme3.app.SimpleApplication; |
|
|
|
|
|
|
|
import com.jme3.input.KeyInput; |
|
|
|
|
|
|
|
import com.jme3.input.controls.ActionListener; |
|
|
|
|
|
|
|
import com.jme3.input.controls.AnalogListener; |
|
|
|
|
|
|
|
import com.jme3.input.controls.KeyTrigger; |
|
|
|
import com.jme3.material.Material; |
|
|
|
import com.jme3.material.Material; |
|
|
|
import com.jme3.math.Quaternion; |
|
|
|
import com.jme3.math.Quaternion; |
|
|
|
import com.jme3.math.Vector3f; |
|
|
|
import com.jme3.math.Vector3f; |
|
|
@ -46,6 +50,9 @@ import com.jme3.scene.shape.Sphere; |
|
|
|
public class TestInstancing extends SimpleApplication { |
|
|
|
public class TestInstancing extends SimpleApplication { |
|
|
|
|
|
|
|
|
|
|
|
private InstancedGeometry instancedGeometry; |
|
|
|
private InstancedGeometry instancedGeometry; |
|
|
|
|
|
|
|
private Node instancedGeoms; |
|
|
|
|
|
|
|
private Material material; |
|
|
|
|
|
|
|
private boolean enabled = true; |
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args){ |
|
|
|
public static void main(String[] args){ |
|
|
|
TestInstancing app = new TestInstancing(); |
|
|
|
TestInstancing app = new TestInstancing(); |
|
|
@ -65,8 +72,10 @@ public class TestInstancing extends SimpleApplication { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void simpleInitApp() { |
|
|
|
public void simpleInitApp() { |
|
|
|
|
|
|
|
initInputs(); |
|
|
|
|
|
|
|
|
|
|
|
Sphere sphere = new Sphere(10, 10, 0.5f, true, false); |
|
|
|
Sphere sphere = new Sphere(10, 10, 0.5f, true, false); |
|
|
|
Material material = new Material(assetManager, "Common/MatDefs/Misc/ShowNormals.j3md"); |
|
|
|
material = new Material(assetManager, "Common/MatDefs/Misc/ShowNormals.j3md"); |
|
|
|
material.setBoolean("UseInstancing", true); |
|
|
|
material.setBoolean("UseInstancing", true); |
|
|
|
|
|
|
|
|
|
|
|
instancedGeometry = new InstancedGeometry(InstancedGeometry.Mode.Auto, "instanced_geom"); |
|
|
|
instancedGeometry = new InstancedGeometry(InstancedGeometry.Mode.Auto, "instanced_geom"); |
|
|
@ -77,7 +86,7 @@ public class TestInstancing extends SimpleApplication { |
|
|
|
instancedGeometry.setMaterial(material); |
|
|
|
instancedGeometry.setMaterial(material); |
|
|
|
rootNode.attachChild(instancedGeometry); |
|
|
|
rootNode.attachChild(instancedGeometry); |
|
|
|
|
|
|
|
|
|
|
|
Node instancedGeoms = new Node("instances_node"); |
|
|
|
instancedGeoms = new Node("instances_node"); |
|
|
|
|
|
|
|
|
|
|
|
// Important: Do not render these geometries, only
|
|
|
|
// Important: Do not render these geometries, only
|
|
|
|
// use their world transforms to instance them via
|
|
|
|
// use their world transforms to instance them via
|
|
|
@ -108,4 +117,30 @@ public class TestInstancing extends SimpleApplication { |
|
|
|
flyCam.setMoveSpeed(15); |
|
|
|
flyCam.setMoveSpeed(15); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void initInputs() { |
|
|
|
|
|
|
|
inputManager.addMapping("toggle", new KeyTrigger(KeyInput.KEY_SPACE)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ActionListener acl = new ActionListener() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void onAction(String name, boolean keyPressed, float tpf) { |
|
|
|
|
|
|
|
if (name.equals("toggle") && keyPressed) { |
|
|
|
|
|
|
|
if (enabled) { |
|
|
|
|
|
|
|
enabled = false; |
|
|
|
|
|
|
|
instancedGeoms.setCullHint(CullHint.Dynamic); |
|
|
|
|
|
|
|
instancedGeometry.setCullHint(CullHint.Always); |
|
|
|
|
|
|
|
material.setBoolean("UseInstancing", false); |
|
|
|
|
|
|
|
System.out.println("Instancing OFF"); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
enabled = true; |
|
|
|
|
|
|
|
instancedGeoms.setCullHint(CullHint.Always); |
|
|
|
|
|
|
|
instancedGeometry.setCullHint(CullHint.Never); |
|
|
|
|
|
|
|
material.setBoolean("UseInstancing", true); |
|
|
|
|
|
|
|
System.out.println("Instancing ON"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inputManager.addListener(acl, "toggle"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|