У меня вопрос, есть ли специальный режим для группировки моделей в libGDX. Я создал простой класс, который реализует ApplicationListener
, который показывает мою проблему. Я использую ночную сборку libGDX.
Я читал две разные модели, которые используют ту же текстуру. Приложение отображает соответственно 250 моделей каждого типа. Вот как выглядит часть кода рендеринга:
mModelBatch.begin(camera);
for(int y=0; y<50; y++)
{
for(int x=-5; x<5; x++)
{
ModelInstance instance;
if(x%2 == 0) instance = modelInstance1;
else instance = modelInstance2;
instance.transform.setToTranslation(x, 0, -y);
mModelBatch.render(instance);
}
}
mModelBatch.end();
Я пытался найти хорошее решение, поэтому я написал еще один тестовый код:
public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool)
{
for(int y=0; y<50; y++)
{
for(int x=-5; x<5; x++)
{
ModelInstance instance;
if(x%2 == 0) instance = modelInstance1;
else instance = modelInstance2;
instance.transform.setToTranslation(x, y%3, -y);
Renderable renderable = pool.obtain();
renderable = instance.getRenderable(renderable);
renderables.add(renderable);
}
}
}
Я использовал его, как показано ниже:
mModelBatch.begin(camera);
mModelBatch.render(testRenderProvider);
mModelBatch.end();
Однако он все же дал мне 13 FPS. Между тем, чтобы сделать еще одно испытание, я создал в блендере ту же карту, что и в предыдущей программе. Затем я сгруппировал все в один объект (без каких-либо дополнительных выпусков). Таким образом, я создал один БОЛЬШОЙ объект размером почти 1 МБ, его можно увидеть на скриншоте из блендера.
Я сменил тестовую программу так, чтобы она рисовала только один БОЛЬШОЙ объект:
mModelBatch.begin(camera);
modelInstance1.transform.setToTranslation(0, 0, 0);
mModelBatch.render(modelInstance1);
mModelBatch.end();
Следующее, что я сделал, это то, что я запустил программу на своем телефоне (Sony XPeria Mini Pro - то же, что и раньше) и iPod 5g, и у меня есть... 60 FPS!
Можно ли отобразить все только в одном обратном вызове?