Skip to content

Instantly share code, notes, and snippets.

@mgsx-dev
Created May 2, 2020 07:35
Show Gist options
  • Save mgsx-dev/28be3c3e4f63be55e4298209c95334a6 to your computer and use it in GitHub Desktop.
Save mgsx-dev/28be3c3e4f63be55e4298209c95334a6 to your computer and use it in GitHub Desktop.
Basic libgdx 3D boilerplate
import com.badlogic.gdx.Game;
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.Texture;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.Material;
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.attributes.TextureAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.viewport.FitViewport;
public class Basic3DGame extends Game {
private FitViewport viewport;
private PerspectiveCamera camera;
private CameraInputController cameraController;
private ModelBatch batch;
private Environment env;
private ModelInstance modelInstance;
private Texture texture;
private ColorAttribute ambiantLight;
private DirectionalLight sunLight;
private DirectionalLight cameraLight;
@Override
public void create() {
// camera
camera = new PerspectiveCamera();
camera.fieldOfView = 50f;
camera.near = .01f;
camera.far = 100f;
camera.up.set(Vector3.Y);
camera.position.set(10, 10, 10);
camera.lookAt(Vector3.Zero);
camera.update();
viewport = new FitViewport(16f, 9f, camera);
cameraController = new CameraInputController(camera);
Gdx.input.setInputProcessor(cameraController);
// environment
batch = new ModelBatch();
env = new Environment();
env.set(ambiantLight = new ColorAttribute(ColorAttribute.AmbientLight, Color.DARK_GRAY));
env.add(sunLight = new DirectionalLight().set(Color.WHITE, new Vector3(1, -3, 1)));
env.add(cameraLight = new DirectionalLight().set(Color.WHITE, new Vector3(1, 1, 1)));
// material
Material material = new Material();
material.set(ColorAttribute.createDiffuse(Color.WHITE));
// download at https://blenderartists.org/uploads/default/original/4X/4/e/3/4e31caa0f5acc386e4a504eab2269ebdb47f0307.jpg
texture = new Texture(Gdx.files.internal("mars.jpg"));
material.set(TextureAttribute.createDiffuse(texture));
// model
Model model = createSphere(material);
modelInstance = new ModelInstance(model);
}
private Model createSphere(Material material){
float sphereSize = 10f;
int divisionsU = 32;
int divisionsV = 16;
return new ModelBuilder().createSphere(sphereSize, sphereSize, sphereSize, divisionsU, divisionsV, material, Usage.Position | Usage.Normal | Usage.TextureCoordinates);
}
@Override
public void resize(int width, int height) {
viewport.update(width, height);
}
@Override
public void render() {
cameraController.update();
ambiantLight.color.set(Color.WHITE).mul(.2f);
sunLight.color.set(Color.WHITE).mul(.8f);
cameraLight.color.set(Color.WHITE).mul(.5f);
cameraLight.direction.set(camera.direction);
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
batch.begin(camera);
batch.render(modelInstance, env);
batch.end();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment