2016-04-15 4 views
1

Я изучаю, как визуализировать объекты с помощью libGdx. У меня есть одна квадратная модель, которая создает из них несколько экземпляров модели. Если у меня есть только одна модель, она отлично выглядит. enter image description hereРендеринг нескольких 3D-объектов

Но если у меня больше случаев, это не так. Похоже, что передние объекты рисуются сначала, а фон - последний, поэтому всегда видны фоновые объекты и передние объекты, которые вы видите через них. enter image description here

Оказывать Я использую следующий

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

    mb.begin(cam); 
    worldManager.render(mb, environment); 
    mb.end(); 

переменного мб это экземпляр ModelBatch, и внутри worldManager.render каждый экземпляр модели сделать следующим образом:

mb.render(model, environment); 

Я не конечно, что происходит. Но я думаю, что это какой-то атрибут GL, который мне нужен.

Не на 100% связано со следующим post, потому что, да, он использует OPENGL как libgdx, но решение, предоставленное в этом сообщении, не работает, и я думаю, что проблема возникает от ModelBatch из libgdx

Reproduction of the problem

+3

Возможно, это может быть 'glEnable (GL_DEPTH_TEST)'? Возможно также, что вы включили его, но не создали буфер глубины, и все работает точно так же, как вы не включили. – Guiroux

+1

Возможный дубликат [OpenGL ES 2.0, отображающий объекты в порядке противоположной глубины с помощью LibGDX] (http: // stackoverflow.com/questions/25070612/opengl-es-2-0-displaying-objects-in-opposite-depth-order-using-libgdx) – Guiroux

+0

Я помечен как дубликат, потому что это opengl с использованием libgdx, и у вас есть та же проблема, так что, возможно, принятый ответ поможет вам – Guiroux

ответ

3

Вы не правильно настроили камеру. Прежде всего, ближайшая плоскость вашей камеры - 0f, что означает, что она бесконечно мала. Установите значение не менее 1f. Во-вторых, вы устанавливаете камеру, чтобы посмотреть на ее собственное положение, что невозможно (вы не можете смотреть в свои собственные глаза, можете ли вы;)).

Так это будет выглядеть примерно так:

camera = new PerspectiveCamera(90, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
camera.position.set(0, 10, 0); 
camera.lookAt(0,0,0); 
camera.near = 1f; 
camera.far = 100f; 
camera.update(); 

Вы, наверное, хотите, чтобы начать здесь: https://xoppa.github.io/blog/basic-3d-using-libgdx/

Для получения дополнительной информации о том, как работает камера взглянуть на: http://www.badlogicgames.com/wordpress/?p=1550

Btw, вызов Gdx.gl20.glEnable(GL20.GL_DEPTH_TEST); не поможет в этом месте и, безусловно, не следует делать, если он смешивается с ModelBatch. ModelBatch управляет собственным контекстом визуализации, см. Документацию для получения дополнительной информации: https://github.com/libgdx/libgdx/wiki/ModelBatch

+0

спасибо, что проблема была на камере. Да, я знаю, что modelbatch имеет свой собственный контекст визуализации, поэтому думаю, что проблема была там, и я пытаюсь включить depth_test в контексте modelbatch. Но проблема была в фотоаппарате. Благодаря! –

1

есть много возможных ответов, но я бы сказал, что

glEnable (GL_DEPTH_TEST) ; 

может помочь, если вы еще не сделали этого. Кроме того, включение буфера глубины работает только в том случае, если на самом деле у вас есть буфер глубины, что означает, что вы должны убедиться, что он у вас есть, а метод для этого зависит от контекста окна.

+0

Я включил эту строку и все еще не работал. Я думаю, проблема связана с ModelBatch от libgx. Также я тоже помещаю эту строку и все еще не работаю batch.getRenderContext(). SetDepthTest (GL20.GL_DEPTH_BITS); –