Подтвердить что ты не робот

Libgdx странное моделирование - ошибка глубины?

Я получаю это, когда загружаю любой .obj файл с ObjLoader:

enter image description here

Как это выглядит в реальности:

enter image description here

Как я его загружаю:

ModelInstance instance = new ModelInstance(model);
instance.transform.setToTranslation(-4, 0, 0);
instance.transform.mul(transform.setToRotation(Axis.X,(float)(Math.random()*360)));

Затем в onCreate():

Gdx.gl.glClearDepthf(1.0f);
Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
Gdx.gl.glDepthFunc(GL20.GL_LESS);
Gdx.gl.glDepthRangef(0f, 1f);
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D);

И в render():

Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClearColor(.1f, .1f, .1f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

shader.begin(camera, instances.get(i).transform);
modelBatch.begin(camera);

if (environment !=null) modelBatch.render(instances.get(i), environment, shader);
else modelBatch.render(instances.get(i), shader);

modelBatch.end();
shader.end();

Очистите исходный код здесь:

исходный код

РЕШЕНИЕ:

1, probleme was with the .mtl file, copy pasted from the ship.mtl and rewrite
2, probleme was with the camera near, and far plane (0.1 and 1000 is the good)
3, probleme was with the obj file texture, because it flipped on the obj file, solution was to convert g3db with -f
4b9b3361

Ответ 1

При использовании libgdx 3D api (ModelBatch и/или Shader) вы не должны изменять состояние opengl вне класса Shader. Таким образом, включение/отключение проверки глубины и т.д. Бесполезно и может привести к непредсказуемому поведению.

Вам не следует использовать obj файлы. Вместо этого используйте fbx-conv и используйте формат файла g3db или g3dj. Кроме того, вашей модели не хватает файла mtl, в результате чего материал не будет применяться.

Вы используете свой собственный шейдер, вам не нужно вызывать shader.end(), modelbatch делает это для вас.

Я попробовал вашу модель (без материала явно), и он корректно отображает шейдер по умолчанию.

Ответ 2

Похоже, у вас есть некоторые проблемы с вашими нормалями. Я не думаю, что это проблема неправильной глубины. В зависимости от вашей программы моделирования, например. blender3D, вы можете попытаться пересчитать свои возможности и экспортировать его снова!

Ответ 3

Вы можете выполнить следующие шаги в 3D Studio Max:

  • Выберите весь свой дизайн с помощью CTRL + A (если вы используете Windows)
  • Нажмите ALT + G, чтобы выбрать категорию группы рядом с пунктом "Редактирование" и "Инструменты"
  • Сделайте всю работу как группу.
  • Повторите попытку в своем приложении для Android.

Это должно быть сделано.