OSDN Git Service

b228317a5e59b4783e07e3044708a816bf329054
[mikumikustudio/libgdx-mikumikustudio.git] / tests / gdx-tests / src / com / badlogic / gdx / tests / g3d / Basic3DSceneTest.java
1 package com.badlogic.gdx.tests.g3d;
2
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;
21
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;
30         
31         public Array<ModelInstance> blocks = new Array<ModelInstance>();
32         public Array<ModelInstance> invaders = new Array<ModelInstance>();
33         public ModelInstance ship;
34         public ModelInstance space;
35         
36         @Override
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));
43                 
44                 cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
45                 cam.position.set(0f, 7f, 10f);
46                 cam.lookAt(0,0,0);
47                 cam.near = 0.1f;
48                 cam.far = 300f;
49                 cam.update();
50
51                 camController = new CameraInputController(cam);
52                 Gdx.input.setInputProcessor(camController);
53                 
54                 assets = new AssetManager();
55                 assets.load("data/g3d/invaders.g3dj", Model.class);
56                 loading = true;
57         }
58
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);
65                         
66                         instance.transform.set(node.globalTransform);
67                         node.translation.set(0,0,0);
68                         node.scale.set(1,1,1);
69                         node.rotation.idt();
70                         instance.calculateTransforms();
71                         
72                         if (id.equals("space")) {
73                                 space = instance;
74                                 continue;
75                         }
76                         
77                         instances.add(instance);
78                         
79                         if (id.equals("ship"))
80                                 ship = instance;
81                         else if (id.startsWith("block"))
82                                 blocks.add(instance);
83                         else if (id.startsWith("invader"))
84                                 invaders.add(instance);
85                 }
86
87                 loading = false;
88         }
89         
90         @Override
91         public void render () {
92                 if (loading && assets.update())
93                         doneLoading();
94                 camController.update();
95                 
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);
98
99                 modelBatch.begin(cam);
100                 for (ModelInstance instance : instances)
101                         modelBatch.render(instance, lights);
102                 if (space != null)
103                         modelBatch.render(space);
104                 modelBatch.end();
105         }
106         
107         @Override
108         public void dispose () {
109                 modelBatch.dispose();
110                 instances.clear();
111                 assets.dispose();
112         }
113         
114         public boolean needsGL20 () {
115                 return true;
116         }
117 }