【发布时间】:2018-01-06 12:21:46
【问题描述】:
我有一个问题困扰了我一个月,甚至更多。有一个大约9000x13000 像素的大背景。我正试图把这个背景带到屏幕上。由于我的显卡只支持分辨率不超过8192x8192 像素的纹理,所以显示的是黑色区域而不是纹理。我将图像压缩为5000x7000 像素。现在显示出来了,但是 FPS 已经下降到50(除了一张图像什么都没有)。此外,游戏还设计为在移动设备上运行,显卡的限制可以是2048x2048 纹理,也许更少。我试图将我的大纹理分成 117 块(每块不超过 1024x1024 像素),然后将它们一个接一个地拉出来。现在游戏的负载大约是一分钟,当纹理输出时,FPS 下降到5!我尝试使用过滤器
texture.setFilter(
Texture.TextureFilter.MipMapNearestNearest,
Texture.TextureFilter.Nearest
);
但 FPS 没有超过 10。它还在加载时将 useMipMap 标志设置为 true。目前我正在这样做:
Texture texture=new Texture(file, true);
texture.setFilter(
Texture.TextureFilter.MipMapNearestNearest,
Texture.TextureFilter.Nearest
);
public void render()
{
batch.begin();
batch.draw(texture,0,0,Gdx.graphics.getScreenWidth(),Gdx.graphics.getScreenHeight());
batch.end();
}
告诉我,如何优化大纹理的输出? 此纹理是一张贴图,因此在接近大屏幕时应该清晰地显示细节。
如果有任何帮助,我将不胜感激
【问题讨论】:
-
我猜不是所有 117 个部分都一直可见。只渲染那些怎么样?
-
是的,我尝试只渲染那些在屏幕上可见的部分,FPS 大约是 30,但是随着地图的增加,FPS 再次下降到 5
-
不幸的是,我认为没有任何优化可以完成。除非您用性能更高的语言编写渲染代码,否则没有什么可做的:/
-
但是,您不能只使用平铺贴图或类似的平铺贴图来显示巨大的纹理。如果纹理的任何部分相同,则可以将它们存储并渲染为图块,这可能意味着性能提升。
-
很遗憾,地图没有重复的元素——它只是艺术家创作的详细绘图
标签: android opengl-es libgdx render-to-texture