Libgdx 0.99功能预览之------使用G3djModelLoader加载模型文件

Libgdx的作者在今年3月28日发博客说:“做好准备吧,新的3d API就要来了”,到现在已经有两个多月了,小菜我忍不住就想看看现在他们做成什么样子,好在开源的框架,源码随时可以拿来编译。怎么下载源码,这里不多说了,就用Git呗。源码编译很简单,两个命令:

  1. 进入到源码主目录,看起来是下面这样,刚刚下载下来,应该有一些不同,因为里面有我编译后生成的文件以及目录
  2. 接下来,确认我们现在check out的是new 3d api的 branch, 如果不是,使用下面所示的方法跳转:

  3. 接下来,在源码主目录下,打命令: ant -f fetch.xml. 这个命令是要下载一些源码代码编译出来的文件。因为这些文件,自己编译起来很麻烦,所以libgdx的作者帮我们都编译好了。成功下载后,会有success的提示。
  4. 看到成功了,就继续再打一个 ant。只要38秒,小蚂蚁就帮我生成了libgdx-0.9.9-SNAPSHOT.zip。这个还不是0.99,只是编译的结果取了这么个名字,准确点,或者应该称为 libgdx-pre-0.9.9-nightly.zip。
这里只说了编译的几个主要步骤,想要成功编译,大家肯定还要做一些设置的,这些就要官网去找找吧,这里给个链接: Building from source

接下来,又到了罗列代码的时候了,代码很短,步骤也不多,相信大家看过小菜我的前几篇博客后,也不会难理解:
package com.kyugao.padlibgdx.screen;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.lights.Lights;
import com.badlogic.gdx.graphics.g3d.lights.PointLight;
import com.badlogic.gdx.graphics.g3d.loader.G3djModelLoader;
import com.badlogic.gdx.graphics.g3d.materials.Material;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;

public class TestLoaderScreen implements Screen {

	private PerspectiveCamera camera;
	private Model knightModel, axesModel;
	private ModelInstance knightInstance, axesInstance;
	private ModelBatch modelBatch;
	private Lights lights;
	private CameraInputController inputController;

	public TestLoaderScreen() {

		camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(),
				Gdx.graphics.getHeight());
		camera.near = 0.1f;
		camera.far = 300f;
		camera.position.set(2f, 2f, 2f);
		camera.lookAt(0, 0, 0);
		camera.update();

		final G3djModelLoader loader = new G3djModelLoader();
		knightModel = loader.load(Gdx.files.internal("g3d/knight.g3dj"));
		knightInstance = new ModelInstance(knightModel);

		modelBatch = new ModelBatch();

		lights = new Lights().add(
				new PointLight().set(1f, 1f, 1f, -20f, 10f, 0f, 150f),
				new PointLight().set(0f, 0f, 1f, 10f, 10f, 0f, 150f),
				new PointLight().set(0f, 1f, 0f, 0f, 10f, 50f, 150f));

		createAxes();

		Gdx.input
				.setInputProcessor(inputController = new CameraInputController(
						camera));
	}

	private void createAxes() {
		ModelBuilder modelBuilder = new ModelBuilder();
		modelBuilder.begin();

		MeshPartBuilder builder = modelBuilder.part("axes", GL10.GL_LINES,
				Usage.Position | Usage.Color, new Material());
		builder.setColor(Color.RED);
		builder.line(0, 0, 0, 100, 0, 0);
		builder.setColor(Color.GREEN);
		builder.line(0, 0, 0, 0, 100, 0);
		builder.setColor(Color.BLUE);
		builder.line(0, 0, 0, 0, 0, 100);
		axesModel = modelBuilder.end();
		axesInstance = new ModelInstance(axesModel);
	}

	@Override
	public void dispose() {
		modelBatch.dispose();
		axesModel.dispose();
		axesModel = null;
	}

	@Override
	public void hide() {
	}

	@Override
	public void pause() {
	}

	@Override
	public void render(float arg0) {
		inputController.update();
		GL10 gl = Gdx.gl10;
		gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

		modelBatch.begin(camera);
		modelBatch.render(axesInstance);
		modelBatch.render(knightInstance, lights);
		modelBatch.end();
	}

	@Override
	public void resize(int arg0, int arg1) {
	}

	@Override
	public void resume() {
	}

	@Override
	public void show() {
	}
}

然后上效果图,其实,运行出来时,人物是斜躺着的,我这不是用鼠标转了一下嘛!这个是libgdx中的CameraInputController类提供功能:


我加了System.out小试了一下,加载这个模型文件一共用了。。。。。。

1368796830172

1368796831658


1.5秒!!!





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值