2014-01-24 2 views
1

Я просто быстрый простой вопрос (это может быть довольно очевидным для вас, но я довольно новыми для libGDX и графики в целом):libGDX производительность: лучшее время для OrthographicCamera.update()

Когда это лучше всего вызвать метод camera.update() в libGDX? В частности, есть ли что-нибудь еще в методе рендеринга [я знаю, что я должен называть его в rende-методе :-)], который я определенно хочу сделать до или после обновления камеры (например, начиная пакет)? Или это полностью зависит от меня?

Спасибо за ответы,

Тони

+0

Необходимо только обновить камеру, когда она изменилась. Если ваша камера постоянно перемещается, делая обновление, каждый рендер является стандартом. перед вызовом spriteBatch.setProjectionMatrix (camera.combined); – Lestat

ответ

3

Это не имеет значения до тех пор, как вы это делаете, прежде чем начать на самом деле рисовать вещи, так как матрица камеры должна быть рассчитана, прежде чем он передается в любые рендеры. Например, с помощью спрайт-пакета вы должны обновить свою камеру в какой-то момент, прежде чем звонить spriteBatch.setProjectionMatrix(camera.combined);, который должен прибыть перед вызовом spriteBatch.begin().

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

Документы для cocos3d говорят, что лучше всего использовать весь материал на основе процессора, а затем попытаться выполнить все вызовы рисования в кратчайшие сроки, чтобы максимально использовать использование центрального процессора и графического процессора. Я не знаю, какая разница, и насколько это возможно, чтобы следовать этому руководству в libgdx. Но если это поможет, то, как вы достигнете этого в libgdx, убедитесь, что ваша партия спрайтов имеет емкость, по крайней мере такую ​​же большую, как и большинство спрайтов, которые вы когда-либо давали бы в одном фрейме (так что ей не нужно скрывать до того, как вы дойдете до звонка до end()). И если вы делаете 3D-рисунок с помощью ModelBatch и DecalBatch, вы действительно захотите сделать это прямо перед вызовом spriteBatch.end() и после того, как вы добавили все спрайты в пакет.

+0

Спасибо, это мне очень помогло. – tomet

Смежные вопросы