Можно ли визуализировать сферу с помощью Libgdx после того, как пользователь нажимает / нажимает на экран, в выбранной пользователем позиции? Неважно, что я пытаюсь, похоже, он не работает и либо вылетает из программы, либо просто ничего не делает.
Я бы хотел короткий демонстрационный код, если это возможно - спасибо!
Вот мой весь класс. Я, вероятно, неправильно делаю множество вещей:
package com.mygdx.game;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
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.CameraInputController;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.graphics.FPSLogger;
/**
* See: http://blog.xoppa.com/basic-3d-using-libgdx-2/
* @author Xoppa
*/
public class Render implements ApplicationListener {
public Environment environment;
public PerspectiveCamera cam;
public CameraInputController camController;
public ModelBatch modelBatch;
private FPSLogger fps;
public Model model;
@Override
public void create() {
Gdx.graphics.setContinuousRendering(false);
DataBase.r = this;
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.Specular, 0.4f, 0.4f, 0.4f, 0.6f));
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, 0f, 0f, -1f));
modelBatch = new ModelBatch();
cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.position.set(0f, 0f, 10f);
cam.lookAt(0,0,0);
cam.near = 1f;
cam.far = 300f;
cam.update();
ModelBuilder modelBuilder = new ModelBuilder();
model = modelBuilder.createSphere(1f, 1f, 1f, 30, 30,
new Material(), Usage.Position | Usage.Normal);
ModelInstance instance = new ModelInstance(model);
instance.transform.setToTranslation(1, 1, 1);
ModelInstance instance2 = new ModelInstance(model);
camController = new CameraInputController(cam);
Gdx.input.setInputProcessor(camController);
DataBase.array.add(instance);
DataBase.array.add (instance2);
Gdx.input.setInputProcessor(new InputAdapter());
if (Gdx.input.justTouched()) {
System.out.println ("yes");
ModelInstance Instance = new ModelInstance (model);
Instance.transform.setToTranslation(Gdx.input.getX(),Gdx.input.getY(), 0);
DataBase.array.add(Instance);
Gdx.graphics.requestRendering();
}
fps = new FPSLogger();
}
@Override
public void render() {
camController.update();
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: DataBase.array) {
modelBatch.render(instance, environment);
}
modelBatch.end();
//fps.log();
}
@Override
public void dispose() {
modelBatch.dispose();
model.dispose();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
DataBase.array - это просто ArrayList<ModelInstance>
.