jmonkey Instanced例子

如果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();
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值