1 package com.badlogic.gdx.tests.g3d;
3 import com.badlogic.gdx.ApplicationListener;
4 import com.badlogic.gdx.Gdx;
5 import com.badlogic.gdx.assets.AssetManager;
6 import com.badlogic.gdx.graphics.GL10;
7 import com.badlogic.gdx.graphics.PerspectiveCamera;
8 import com.badlogic.gdx.graphics.g3d.Environment;
9 import com.badlogic.gdx.graphics.g3d.Model;
10 import com.badlogic.gdx.graphics.g3d.ModelBatch;
11 import com.badlogic.gdx.graphics.g3d.ModelInstance;
12 import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
13 import com.badlogic.gdx.graphics.g3d.attributes.IntAttribute;
14 import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
15 import com.badlogic.gdx.graphics.g3d.environment.DirectionalShadowLight;
16 import com.badlogic.gdx.graphics.g3d.model.Node;
17 import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
18 import com.badlogic.gdx.math.Vector3;
19 import com.badlogic.gdx.tests.utils.GdxTest;
20 import com.badlogic.gdx.utils.Array;
22 public class Basic3DSceneTest extends GdxTest implements ApplicationListener {
23 public PerspectiveCamera cam;
24 public CameraInputController camController;
25 public ModelBatch modelBatch;
26 public AssetManager assets;
27 public Array<ModelInstance> instances = new Array<ModelInstance>();
28 public Environment lights;
29 public boolean loading;
31 public Array<ModelInstance> blocks = new Array<ModelInstance>();
32 public Array<ModelInstance> invaders = new Array<ModelInstance>();
33 public ModelInstance ship;
34 public ModelInstance space;
37 public void create () {
38 modelBatch = new ModelBatch();
39 lights = new Environment();
40 lights = new Environment();
41 lights.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1.f));
42 lights.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));
44 cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
45 cam.position.set(0f, 7f, 10f);
51 camController = new CameraInputController(cam);
52 Gdx.input.setInputProcessor(camController);
54 assets = new AssetManager();
55 assets.load("data/g3d/invaders.g3dj", Model.class);
59 private void doneLoading() {
60 Model model = assets.get("data/g3d/invaders.g3dj", Model.class);
61 for (int i = 0; i < model.nodes.size; i++) {
62 String id = model.nodes.get(i).id;
63 ModelInstance instance = new ModelInstance(model, id);
64 Node node = instance.getNode(id);
66 instance.transform.set(node.globalTransform);
67 node.translation.set(0,0,0);
68 node.scale.set(1,1,1);
70 instance.calculateTransforms();
72 if (id.equals("space")) {
77 instances.add(instance);
79 if (id.equals("ship"))
81 else if (id.startsWith("block"))
83 else if (id.startsWith("invader"))
84 invaders.add(instance);
91 public void render () {
92 if (loading && assets.update())
94 camController.update();
96 Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
97 Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
99 modelBatch.begin(cam);
100 for (ModelInstance instance : instances)
101 modelBatch.render(instance, lights);
103 modelBatch.render(space);
108 public void dispose () {
109 modelBatch.dispose();
114 public boolean needsGL20 () {