graphics.Shape3D.java Source code

Java tutorial

Introduction

Here is the source code for graphics.Shape3D.java

Source

package graphics;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.*;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.*;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;

import java.util.ArrayList;
import java.util.List;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Environment;
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.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.math.MathUtils;

import databases.CargoSpaceIndividual;
import databases.ShapeGenerator;

/**
 /*** Copyright 2011 See AUTHORS file.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * See: http://blog.xoppa.com/basic-3d-using-libgdx-2/
 * 
 * @author Xoppa
 */

public class Shape3D implements ApplicationListener {
    private Environment lights;
    private PerspectiveCamera cam;
    private ModelBatch modelBatch;
    private List<ModelInstance> instances;
    private ShapeGenerator aShape;
    private int GRID_MIN = 0;
    private int GRID_MAX_X = 0;
    private int GRID_MAX_Y = 0;
    private int GRID_MAX_Z = 0;

    public Shape3D(ShapeGenerator aShape) {
        this.aShape = aShape;
        GRID_MAX_Y = aShape.getShape().length - 1;
        GRID_MAX_X = aShape.getShape()[0].length - 1;
        GRID_MAX_Z = aShape.getShape()[0][0].length - 1;
    }

    @Override
    public void create() {
        lights = new Environment();
        lights.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
        lights.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

        modelBatch = new ModelBatch();

        cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        cam.position.set(10f, 10f, 10f);
        cam.lookAt(0, 0, 0);
        cam.near = 1f;
        cam.far = 300f;
        cam.update();

        //        ModelBuilder modelBuilder = new ModelBuilder();
        //        model = modelBuilder.createBox(5f, 5f, 5f, new Material(ColorAttribute.createDiffuse(Color.GREEN)),
        //        Usage.Position | Usage.Normal);
        //        instance = new ModelInstance(model);

        ModelBuilder modelBuilder = new ModelBuilder();
        MeshPartBuilder builder;

        List<Model> models = new ArrayList<Model>();
        instances = new ArrayList<ModelInstance>();

        for (float y = GRID_MIN; y <= GRID_MAX_Y; y += 1) {
            for (float x = GRID_MIN; x <= GRID_MAX_X; x += 1) {
                for (float z = GRID_MIN; z <= GRID_MAX_Z; z += 1) {

                    if (aShape.getShape()[(int) y][(int) x][(int) z] != 0) {
                        modelBuilder.begin();
                        builder = modelBuilder.part("grid", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal,
                                new Material(ColorAttribute.createDiffuse(new Color(0.9f, 0.4f, 0.2f, 0))));
                        builder.setColor(Color.GREEN);
                        builder.box(y, x, z, 1f, 1f, 1f);
                        models.add(modelBuilder.end());

                        instances.add(new ModelInstance(models.get(models.size() - 1)));
                    }
                }
            }
        }
        System.out.println("Done");

    }

    @Override
    public void render() {
        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);
        for (ModelInstance instance : instances) {
            modelBatch.render(instance, lights);
        }
        modelBatch.end();
    }

    @Override
    public void dispose() {
        //      modelBatch.dispose();
        //      model.dispose();
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}