Libgdx 0.99功能预览之------使用G3djModelLoader加载模型文件
Libgdx的作者在今年3月28日发博客说:“做好准备吧,新的3d API就要来了”,到现在已经有两个多月了,小菜我忍不住就想看看现在他们做成什么样子,好在开源的框架,源码随时可以拿来编译。怎么下载源码,这里不多说了,就用Git呗。源码编译很简单,两个命令:进入到源码主目录,看起来是下面这样,刚刚下载下来,应该有一些不同,因为里面有我编译后生成的文件以及目录接下来,确认我们现在ch
·
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秒!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)