LibGDX 3d модель текстуры не рендерится правильно

Просто один на один, я действительно новичок в этом, так что извините, если мой вопрос неясен:

Я сделал 3D-модель, используя Blender, и в качестве материала для моей модели я просто использовал микшер с глянцевыми и диффузными текстурами. Я пытаюсь заставить его правильно отображаться в LibGDX. Когда я рендерил модель в Blender, вот как это выглядит:

Затем я экспортирую файл в fbx, затем использую fbx-conv, чтобы преобразовать его в файл.g3db, но когда я пытаюсь загрузить модель в своем коде (взято с http://blog.xoppa.com/loading-models-using-libgdx/):

public class Basic3DTest implements ApplicationListener {
PerspectiveCamera cam;
public CameraInputController camController;
public Environment environment;
public ModelInstance instance;
public ModelBatch modelBatch;
public AssetManager assets;
public Array<ModelInstance> instances = new Array<ModelInstance>();
public boolean loading;

@Override
public void create() {
    modelBatch = new ModelBatch();
    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f,
            0.4f, 0.4f, 1f));
    environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -.5f,
            -0.6f, -1f));
    cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(),
            Gdx.graphics.getHeight());
    cam.position.set(10f, 10f, 10f);
    cam.lookAt(0, 0, 0);
    cam.near = 0.1f;
    cam.far = 300f;
    cam.update();
    camController = new CameraInputController(cam);
    Gdx.input.setInputProcessor(camController);
    assets = new AssetManager();
    assets.load("data/Space Game/ModelData/blinky.g3db", Model.class);
    loading = true;
}

  private void doneLoading() {
        Model ship = assets.get("data/Space Game/ModelData/blinky.g3db", Model.class);
        ModelInstance shipInstance = new ModelInstance(ship); 
        instances.add(shipInstance);
        loading = false;
    }

@Override
public void dispose() {
    modelBatch.dispose();
    instances.clear();
    assets.dispose();
}

@Override
public void pause() {
    // TODO Auto-generated method stub

}

@Override
   public void render () {
    if (loading && assets.update())
        doneLoading();
    camController.update();

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(cam);
    modelBatch.render(instances, environment);
    modelBatch.end();
}

@Override
public void resize(int arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void resume() {
    // TODO Auto-generated method stub

}

}

Вот что проявляется:

Есть идеи, что может быть не так? Большое спасибо заранее.

2 ответа

Вы должны явно установить шейдер во время рендеринга. Для получения информации об использовании шейдера в libgdx, пожалуйста, обратитесь к https://github.com/libgdx/libgdx/wiki/Shaders

      'AssetManager assets = new AssetManager();'
'assets.load("myFile.g3db", Model.class);'
'assets.finishLoading();'
'Model myModel = assets.get("myFile.g3db", Model.class);'

'ModelInstance myInstance = new ModelInstance(myModel);'
'Texture myTexture = new Texture(Gdx.files.internal("badlogic.png"));'
'Material myMaterial = new Material(TextureAttribute.createDiffuse(myTexture));'
'NodePart nodePart = myModel.nodes.get(0).parts.get(0);'
'nodePart.material.set(myMaterial);

/* Все это должно быть в методе create */

Другие вопросы по тегам