我正在学习这些touturials g3d:https://xoppa.github.io/blog/loading-a-scene-with-libgdx/
我确实重新创建了他的代码并且一切运行良好。
现在我尝试自己创建invaderscene.g3db的场景
我的代码:
public class ScreenLearn3D implements Screen {
private final Game game;
public ScreenLearn3D(Game game) {
this.game = game;
}
private PerspectiveCamera camera;
private CameraInputController cameraController;
private Manager manager;
private ModelBatch modelBatch;
private Array<ModelInstance> instances;
private Environment environment;
@Override
public void show() {
camera = new PerspectiveCamera();
cameraController = new CameraInputController(camera);
manager = new Manager();
modelBatch = new ModelBatch();
instances = new Array<ModelInstance>();
environment = new Environment();
camera.position.set(0f, 20f, 20f);
camera.lookAt(0f, 0f, 0f);
camera.near = 0f;
camera.far = 300f;
camera.update();
Gdx.input.setInputProcessor(cameraController);
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, 1f, -0.8f, -0.2f));
}
private void setup() {
for (int i = 0; i < manager.model.nodes.size; i++) {
String id = manager.model.nodes.get(i).id;
ModelInstance instance = new ModelInstance(manager.model, id);
instances.add(instance);
}
}
@Override
public void render(float delta) {
if(manager.update()) {
setup();
}
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
modelBatch.begin(camera);
modelBatch.render(instances, environment);
modelBatch.end();
}
@Override
public void resize(int width, int height) {
camera.fieldOfView = 67f;
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.update();
}
@Override
public void dispose() {
Gdx.app.log("Dispose", "ScreenLearn3D");
modelBatch.dispose();
instances.clear();
}
}
public final class Manager implements Disposable {
private final AssetManager manager;
private boolean isLoaded;
protected Model model;
public Manager() {
manager = new AssetManager();
isLoaded = false;
load();
}
private void load() {
manager.load("invaderscene.g3db", Model.class);
}
public boolean update() {
if (manager.update() && !isLoaded) {
model = manager.get("invaderscene.g3db");
// Reference loaded assets
isLoaded = true;
return true;
} else {
return false;
}
}
@Override
public void dispose() {
manager.dispose();
model.dispose();
}
}
现在我得到了奇怪的物体展示......
在卡马拉面前,物体消失了 但是如果我旋转相机它们会很好。 (当我远远或接近异常时)
1#编辑:Link
2#编辑:问题解决了。 camera.near应该超过0。