Java libGDX性能:正交摄影机的最佳时间。更新()

Java libGDX性能:正交摄影机的最佳时间。更新(),java,performance,libgdx,spritebatch,Java,Performance,Libgdx,Spritebatch,我有一个简单的问题(这对您来说可能相当明显,但我对libGDX和图形基本上是新手): 什么时候调用libGDX中的camera.update()方法是最好的?具体来说,在render方法[我确实知道我必须在rende方法中调用它:-)]中是否还有其他我在更新相机之前或之后(例如,开始批处理)肯定要做的事情?还是完全由我决定 谢谢你的回答 Tony只要你在开始实际绘制之前这样做,这并不重要,因为相机的矩阵必须在传递给任何渲染器之前进行计算。例如,使用sprite batch,在调用spriteBa

我有一个简单的问题(这对您来说可能相当明显,但我对libGDX和图形基本上是新手):

什么时候调用libGDX中的camera.update()方法是最好的?具体来说,在render方法[我确实知道我必须在rende方法中调用它:-)]中是否还有其他我在更新相机之前或之后(例如,开始批处理)肯定要做的事情?还是完全由我决定

谢谢你的回答


Tony

只要你在开始实际绘制之前这样做,这并不重要,因为相机的矩阵必须在传递给任何渲染器之前进行计算。例如,使用sprite batch,在调用
spriteBatch.setProjectionMatrix(camera.combined)之前,必须在某个时间点更新相机必须在调用spriteBatch.begin()之前出现

这样做不会影响性能。无论如何,你不必担心像这样的每帧一次的事情。您的CPU瓶颈几乎肯定是在处理数百个精灵或粒子并移动它们,然后将它们传递给批处理,或者在物理模拟中(如果您使用一个)


cocos3d的文档说,最好先完成所有基于CPU的工作,然后尝试快速连续地完成所有draw调用,以最大限度地并行使用CPU和GPU。我不知道这会造成多大的不同,也不知道在libgdx中遵循这条准则的可能性有多大。但是如果它确实有用,那么在libgdx中实现这一点的方法是确保您的sprite批处理的容量至少与您在一个帧中提供给它的大多数sprite的容量一样大(因此在调用
end()
之前,它不必刷新自身)。如果您正在使用ModelBatch和贴花batch进行3D绘图,您实际上希望在调用
spriteBatch.end()
之前以及在已将所有精灵添加到批次中之后进行此操作。

只需在相机发生更改时更新相机。如果摄影机不断移动,则标准做法是在每次渲染时进行更新。调用spriteBatch.setProjectionMatrix(camera.combined)之前;谢谢,这对我帮助很大。