• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright 2011 See AUTHORS file.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 package com.badlogic.gdx.tests.g3d;
18 
19 import com.badlogic.gdx.ApplicationListener;
20 import com.badlogic.gdx.Gdx;
21 import com.badlogic.gdx.assets.AssetManager;
22 import com.badlogic.gdx.graphics.GL20;
23 import com.badlogic.gdx.graphics.PerspectiveCamera;
24 import com.badlogic.gdx.graphics.g3d.Environment;
25 import com.badlogic.gdx.graphics.g3d.Model;
26 import com.badlogic.gdx.graphics.g3d.ModelBatch;
27 import com.badlogic.gdx.graphics.g3d.ModelInstance;
28 import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
29 import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
30 import com.badlogic.gdx.graphics.g3d.model.Node;
31 import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
32 import com.badlogic.gdx.tests.utils.GdxTest;
33 import com.badlogic.gdx.utils.Array;
34 
35 public class Basic3DSceneTest extends GdxTest implements ApplicationListener {
36 	public PerspectiveCamera cam;
37 	public CameraInputController camController;
38 	public ModelBatch modelBatch;
39 	public AssetManager assets;
40 	public Array<ModelInstance> instances = new Array<ModelInstance>();
41 	public Environment lights;
42 	public boolean loading;
43 
44 	public Array<ModelInstance> blocks = new Array<ModelInstance>();
45 	public Array<ModelInstance> invaders = new Array<ModelInstance>();
46 	public ModelInstance ship;
47 	public ModelInstance space;
48 
49 	@Override
create()50 	public void create () {
51 		modelBatch = new ModelBatch();
52 		lights = new Environment();
53 		lights.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1.f));
54 		lights.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));
55 
56 		cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
57 		cam.position.set(0f, 7f, 10f);
58 		cam.lookAt(0, 0, 0);
59 		cam.near = 0.1f;
60 		cam.far = 300f;
61 		cam.update();
62 
63 		camController = new CameraInputController(cam);
64 		Gdx.input.setInputProcessor(camController);
65 
66 		assets = new AssetManager();
67 		assets.load("data/g3d/invaders.g3dj", Model.class);
68 		loading = true;
69 	}
70 
doneLoading()71 	private void doneLoading () {
72 		Model model = assets.get("data/g3d/invaders.g3dj", Model.class);
73 		for (int i = 0; i < model.nodes.size; i++) {
74 			String id = model.nodes.get(i).id;
75 			ModelInstance instance = new ModelInstance(model, id);
76 			Node node = instance.getNode(id);
77 
78 			instance.transform.set(node.globalTransform);
79 			node.translation.set(0, 0, 0);
80 			node.scale.set(1, 1, 1);
81 			node.rotation.idt();
82 			instance.calculateTransforms();
83 
84 			if (id.equals("space")) {
85 				space = instance;
86 				continue;
87 			}
88 
89 			instances.add(instance);
90 
91 			if (id.equals("ship"))
92 				ship = instance;
93 			else if (id.startsWith("block"))
94 				blocks.add(instance);
95 			else if (id.startsWith("invader")) invaders.add(instance);
96 		}
97 
98 		loading = false;
99 	}
100 
101 	@Override
render()102 	public void render () {
103 		if (loading && assets.update()) doneLoading();
104 		camController.update();
105 
106 		Gdx.gl.glViewport(0, 0, Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight());
107 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
108 
109 		modelBatch.begin(cam);
110 		for (ModelInstance instance : instances)
111 			modelBatch.render(instance, lights);
112 		if (space != null) modelBatch.render(space);
113 		modelBatch.end();
114 	}
115 
116 	@Override
dispose()117 	public void dispose () {
118 		modelBatch.dispose();
119 		instances.clear();
120 		assets.dispose();
121 	}
122 }
123