Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GameScreen implements Screen {
- public PerspectiveCamera cam;
- public ModelInstance instance;
- public Model model;
- public Environment environment;
- public ModelBatch modelBatch;
- public GameScreen() {
- cam = new PerspectiveCamera(67f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
- cam.position.set(0, 0, 0);
- cam.lookAt(0,0,0);
- cam.near = 0.1f;
- cam.far = 250f;
- cam.update();
- modelBatch = new ModelBatch();
- environment = new Environment();
- environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.7f, 0.7f, 0.7f, 1f));
- }
- @Override
- public void render(float delta) {
- Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
- Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
- modelBatch.begin(cam);
- Texture tex = new Texture(Gdx.files.internal("grid.png"), true);
- tex.setFilter(TextureFilter.MipMap, TextureFilter.MipMap);
- modelBatch.render(this.createPlane("front",tex), environment);
- modelBatch.render(this.createPlane("bottom", tex), environment);
- modelBatch.render(this.createPlane("left", tex), environment);
- modelBatch.render(this.createPlane("right", tex), environment);
- modelBatch.end();
- }
- @Override
- public void resize(int width, int height) {
- float aspectRatio = (float) width / (float) height;
- cam = new PerspectiveCamera(67, 2f * aspectRatio, 2f);
- }
- private ModelInstance createPlane(String wall, Texture texture) {
- float z = -3.5f;
- Vector3 _00, _01, _10, _11, norm;
- _00 = new Vector3();
- _01 = new Vector3();
- _10 = new Vector3();
- _11 = new Vector3();
- norm = new Vector3();
- // Wall data
- HashMap<String, ArrayList<Vector3>> wallData = new HashMap<String, ArrayList<Vector3>>();
- // front
- ArrayList<Vector3> front = new ArrayList<Vector3>();
- front.add(new Vector3(1, 1, z));
- front.add(new Vector3(-1, 1, z));
- front.add(new Vector3(-1, -1, z));
- front.add(new Vector3(1, -1, z));
- wallData.put("front", front);
- // bottom
- ArrayList<Vector3> bottom = new ArrayList<Vector3>();
- bottom.add(new Vector3(1, -1, z));
- bottom.add(new Vector3(-1, -1, z));
- bottom.add(new Vector3(-1f, -1, z+2));
- bottom.add(new Vector3(1f, -1, z+2));
- wallData.put("bottom", bottom);
- // left
- ArrayList<Vector3> left = new ArrayList<Vector3>();
- left.add(new Vector3(-1, 1, z));
- left.add(new Vector3(-1, 1, z+2));
- left.add(new Vector3(-1, -1, z+2));
- left.add(new Vector3(-1, -1, z));
- wallData.put("left", left);
- // right
- ArrayList<Vector3> right = new ArrayList<Vector3>();
- right.add(new Vector3(1, 1, z+2));
- right.add(new Vector3(1, 1, z));
- right.add(new Vector3(1, -1, z));
- right.add(new Vector3(1, -1, z+2));
- wallData.put("right", right);
- Material material = new Material();
- texture.setFilter(TextureFilter.Linear, TextureFilter.Nearest);
- TextureAttribute textureAttribute = new TextureAttribute(TextureAttribute.Diffuse, texture);
- material.set(textureAttribute);
- ArrayList<Vector3> vertexData = wallData.get(wall);
- Model model = null;
- ModelBuilder mb = new ModelBuilder();
- mb.begin();
- MeshPartBuilder part = mb.part("rect", GL20.GL_TRIANGLES, VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates, material);
- _11.set(vertexData.get(0)); // right up
- _01.set(vertexData.get(1)); // left up
- _00.set(vertexData.get(2)); // left bottom
- _10.set(vertexData.get(3)); // right bottom
- norm = new Vector3(0, 0, -1);
- part.rect(_00, _10, _11, _01, norm);
- model = mb.end();
- model.manageDisposable(texture);
- ModelInstance modelInstance = new ModelInstance(model);
- modelInstance.transform.setToTranslation(0, 0, 0);
- return modelInstance;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement