当前位置: 首页 > 知识库问答 >
问题:

在libgdx中缩放图像仅一次

孟俊晖
2023-03-14

在我的Android游戏中,我使用的是固定分辨率的图像,比如说256x256。现在对于不同的设备屏幕,我通过计算它们的宽度和高度来渲染它们。

假设在galaxy note2上,我计算了宽度=128,高度=128。。。同样,对于不同的设备,宽度和高度也会有所不同。

这就是我如何创建纹理...

....
imageTexture = new Texture(...);
....

在render()中。。

.... 
spriteBatch.draw(imageTexture,x,y,width,height);
....

所以,每次当我调用Drew()方法时,libgdx/opengl都会将图像从256x256缩放到128x128,我想,是的!

有没有办法告诉opengl/libgdx只计算一次所有的缩放?

我不知道图像是如何呈现的?加载到内存?缩放等?

libgdx中的Sprite是如何工作的?我试着理解Sprite的代码,在我看来,他们也得到了图像的宽度和高度,然后每次都进行缩放,即使他们有setScale()方法。

共有1个答案

太叔英锐
2023-03-14

优化的第一条规则:获取一些数字。过早优化是许多问题的根源。尽管如此,仍有一些好的经验法则需要了解。

当您调用新的纹理时,纹理数据将由libgdx/OpenGL上传到GPU。当您实际使用spriteB绘制纹理时atch.drawOpenGL将指令上传到GPU,告诉硬件使用您现有的纹理并使其符合边界。调用只上传坐标(定义Sprite的方框的角)和指向纹理的指针。实际的纹理数据没有上传。

所以,在实践中,你的图像在每一帧上都被“缩放”。然而,这并没有那么糟糕,因为这正是GPU被设计得非常非常好的地方。你只需要担心上传这么多纹理,以至于GPU很难跟踪它们,你不需要提前担心缩放纹理。

与向GPU发送数据和刷新屏幕的成本相比,缩放和转换sprite四个角的成本相对较小,因此它们可能不值得担心太多。SpriteBatch中的“批处理”都是关于“批处理”(或收集)大量坐标,以便一次发送到GPU,因为粗略地说,每次调用GPU都会很昂贵。因此,在单个批次的开始/结束中尽可能多地完成工作总是很好的。

尽管如此,现代机器的速度还是非常快,你应该能够做任何最容易让你的应用程序首先运行的事情。然后,一旦你有了正确的工作方式,你就可以找出哪些部分实际上是慢的,并修复它们。那些“低效”但实际上对应用程序影响不大的部分可以单独处理。

 类似资料:
  • 问题内容: 改变的大小的图像在GWT部件改变所述图像元素的大小,但不重新调整屏幕上的图像。因此,以下操作将无效: 这是因为GWT 通过使用CSS 将HTML 元素的设置为图像来实现其Image小部件。 如何获得要调整尺寸的实际图像? 问题答案: 我看到了此博客条目,该条目通过使用GWT DataResource而不是ImageResource解决了问题。事实证明,如果您按以下方式使用它,则Imag

  • 问题内容: 我想更改多页TIFF图像的高度,所以我在下面的代码段中进行缩放。但是它仅从tiff文件返回第一页,我想它会将其转换为JPEG图像。如何保留文件的所有页面? 更新的代码: 问题答案: 只会写入单个独立映像。将多个图像写入同一输出流并不能解决此问题。但是,ImageIO软件包完全支持您所需的内容,只需要更多代码即可。 使用以下命令获取适用于TIFF格式的格式: 有关更多信息,请参见Imag

  • 以下是CardView的XML代码: 我尝试对ImageView(和LinearLayout)的属性使用wrap_content,并尝试包含属性android: caleType="fitXY",但它没有帮助,似乎没有任何效果。 谁能帮我一下吗?我非常感谢您的每一句评论,也非常感谢您的帮助。

  • 问题内容: 我希望我的背景图像能够根据浏览器视口的大小进行拉伸和缩放。 我看到了一些可以解决问题的问题。它运作良好,但我想使用而不是使用标签放置图片。 在该标签中放置一个标签,然后使用CSS向该标签致敬。 它可以工作,但是这个问题有点老了,并且指出在CSS3中调整背景图像的大小可以很好地工作。,但是对我来说却没有用。 有没有一个很好的方法来处理声明? 问题答案: CSS3有一个很好的小属性,称为。

  • 然后,我根据页面大小与图像大小计算缩放的维度,返回:java.awt.dimension[width=562,height=792]我使用下面的代码来计算缩放的维度: 为了实际执行图像缩放,我使用image Scalr API: 我的问题是我做错了什么?当缩放到较小的尺寸时,大的图像不应该被模糊。这与PDF页面的分辨率/大小有关吗?