您的位置:首页 > 其它

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

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

进入到源码主目录,看起来是下面这样,刚刚下载下来,应该有一些不同,因为里面有我编译后生成的文件以及目录



接下来,确认我们现在check out的是new 3d api的 branch, 如果不是,使用下面所示的方法跳转:



接下来,在源码主目录下,打命令: ant -f fetch.xml. 这个命令是要下载一些源码代码编译出来的文件。因为这些文件,自己编译起来很麻烦,所以libgdx的作者帮我们都编译好了。成功下载后,会有success的提示。
看到成功了,就继续再打一个 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秒!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: