如果batch技術使用不當會導致性能下降,但是用Instanced技術好像也并沒有什麽卵用,這個就不明白了
package jme3test.scene.instancing;
//import com.bulletphysics.collision.broadphase.Dbvt.Node;
import com.jme3.app.SimpleApplication;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.instancing.InstancedNode;
import com.jme3.shadow.DirectionalLightShadowFilter;
import com.jme3.system.AppSettings;
public class TestInstanceing2 extends SimpleApplication {
private boolean INSTANCE = false;
private Node instanceNodeRoot;
@Override
public void simpleInitApp() {
// TODO Auto-generated method stub
setDisplayFps(true);
setDisplayStatView(true);
instanceNodeRoot = new InstancedNode("Instanced Node");
rootNode.attachChild(instanceNodeRoot);
Spatial bumpy = (Spatial) assetManager.loadModel("Models/MonkeyHead/MonkeyHead.mesh.xml");
instanceNodeRoot.attachChild(bumpy);
InitialMaterial(bumpy);
for(int i = -30; i <= 30; i ++)
for( int j = -30; j <= 30; j ++ )
{
Spatial sp = bumpy.clone(false);
sp.setLocalTranslation(i * 2, 0, j * 2);
instanceNodeRoot.attachChild(sp);
}
AmbientLight abLight = new AmbientLight(ColorRGBA.Gray);
rootNode.addLight(abLight);
DirectionalLight dirLight = new DirectionalLight();
dirLight.setColor(ColorRGBA.Blue);
dirLight.setEnabled(true);
dirLight.setDirection(new Vector3f(1, -1, 1));
rootNode.addLight(dirLight);
flyCam.setMoveSpeed(35);
if( INSTANCE == true )
{
((InstancedNode)instanceNodeRoot).instance();
}
}
public void InitialMaterial(Spatial sp) {
if( sp instanceof Geometry )
{
Geometry geo = (Geometry)sp;
geo.getMaterial().setBoolean("UseInstancing", INSTANCE);
}
else
{
for(Spatial i : ((Node)sp).getChildren())
{
InitialMaterial(i);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestInstanceing2 app = new TestInstanceing2();
AppSettings settings = new AppSettings(true);
settings.setVSync(false);
settings.setWidth(1280);
settings.setHeight(800);
app.setSettings(settings);
app.setShowSettings(false);
app.start();
}
}