问题标签 [texture-atlas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
61 浏览

java - 你能从 libgdx 程序中创建一个 TextureAtlas 吗?

在我的游戏中,我让用户从各种精灵中自定义角色,我想创建一个最终的纹理图集,包括在游戏中使用的选定精灵,而不是加载带有所有其他无用精灵的大纹理图集并且只使用必要的精灵。

我想我必须运行某种命令,但我不知道哪个...

谢谢!

0 投票
1 回答
385 浏览

caching - 如何缓存 TextureAtlas 结果?

在使用TextureAtlas通过createSprite方法创建Sprite时,LibGDX文档中说:该方法使用字符串比较来查找区域并构造新的sprite,所以应该缓存结果而不是多次调用该方法。

如何缓存这些结果?它只是我创建的一个变量来存储创建的精灵吗?如果是这样,那么我如何创建同一个精灵的不同副本?

0 投票
1 回答
918 浏览

libgdx - LibGDX 纹理打包器

我正在尝试使用 LibGDX 的纹理打包器 gui 为视频游戏制作瓷砖纹理图集。但我不断得到阿尔法出血,我想知道如何防止这种情况发生?我已经尝试了所有不同的过滤器,唯一有效的是最近的过滤器,但我需要 MipMaps,所以从性能的角度来看这不起作用。那么有没有办法通过 MipMaps 摆脱 alpha 出血?

我正在使用 3.2.0 版本的纹理打包器。

以下是正在发生的事情的图像,文字解释了每个图像中发生的事情。

图像在游戏中完全缩小。

稍微放大。

完全放大,一切都很好。

0 投票
1 回答
485 浏览

ios - Xcode在运行时没有从atlas文件夹中找到图像

我有一个在 Xcode 中创建的应用程序,其中包含大量图像。为了让它更苗条,我在 Xcode 中创建了 .atlas 文件夹,并确保这些文件夹包含我想要的 (*.png) 图像。

从情节提要和 XCode 导航器中,我可以看到 png 文件,并且 UIImageView 对象显示从下拉列表中选择的正确图像。

所以访问的图像没有问题,文件名也没有问题。

当我通过 iPhone 模拟器清理/构建/运行应用程序时,没有图像显示结果为空白......

0 投票
0 回答
382 浏览

c++ - 流式传输纹理图集部分时的 OpenGL 填充和 miplevel

我有一个纹理图集,只有少数部分发生了变化,有时会发生这种情况,所以不是每一帧

我的公益组织策略:

  • 创建一个图集大小的 PBO
  • 使用 glMapBufferRange 在 PBO 内指定一个足够大的内存区域,以容纳变化的图块的所有像素
  • 使用 glUnmapBuffer
  • 对每个图块使用 glTexSubImage2D(对当前绑定的 PBO 使用正确的偏移量而不是指针)

问题编号 1)

PBO和Texture Object之间有直接映射吗?所以假设这是地图集

纹理图集

我可以愉快地将以下数据上传到 PBO 吗?

像素数组

问题2)

认为

子图像的对齐方式如何?我应该假设每个图像都与 ATLAS 对齐(1),还是应该假设每个图像都与相同大小的纹理对齐(2)?

对齐图片

假设 1:在上图中,您可以看到红色垂直线(4 字节列)被称为纹理 ATLAS,橙色区域应该是我必须在每行像素之前添加到子图像的填充字节。

假设 2:在每个像素行之前不会有填充,但在每个像素行之后会有一些填充(就像在 RGB8 的普通纹理中,而不是 2 的幂大小)

问题编号 3)

我应该如何更新 miplevel?我是要手动创建和更新所有 miplevel,还是有一种有效的方法让 OpenGL 自己更新 mipmap 级别?

0 投票
1 回答
86 浏览

andengine - 黑盒而不是重新加载和引擎上的精灵

第二次加载我的 andengine 活动时,我的精灵(它们本身是盒子,但颜色不同)都显示为黑盒子。这很奇怪,因为通常这个问题是由于纹理图集不够大,但我尝试将图集的大小加倍,但没有奏效。所以这里是相关的代码,任何帮助将不胜感激!

所以把它放在那里,第一次加载我的游戏时,一切都很好,很完美,但第二次,精灵出现黑色。

我见过其他问题,其中精灵显示为黑框,但对我来说,它们第一次加载很好,其他问题不会发生这种情况,其他问题给出的答案对我不起作用(他们是, atlas 需要是 2 的幂,atlas 不够大)

(资源卸载方式)

我评论给 tiletextures 一个空值的部分的原因是,这样做由于某种原因会产生一个空异常错误,即使我认为在重新加载活动时会重新分配纹理,因为重新加载活动调用 loadgameresources() 方法

0 投票
2 回答
277 浏览

ios - 为什么 SpriteKit 将所有设备尺寸(~ipad 和@2x~ipad)纹理加载到内存中?

我正在使用以下代码将纹理加载到 SpriteKit 中以用于动画 -

我的问题是,在包含视网膜 iPad、非视网膜 iPad 和视网膜 iPhone 的每个图像的三个版本的图集上使用上述代码会导致应用程序使用所有这些图像的内存。不仅仅是它需要的那些。

我怎样才能使加载到内存中的唯一纹理是应用程序运行所需的设备?

0 投票
1 回答
4267 浏览

ios - SpriteKit 纹理图集与图像 xcassets

我正在制作游戏,我注意到在某些场景中,我的 FPS 一直在 55-60FPS 区域附近下降(使用纹理图集)。这让我发疯了,所以我决定把我所有的资产放到 Images.xcassets 文件夹中,瞧,稳定的 60FPS。

我认为这是侥幸或我做错了什么,所以我决定开始一个新项目并执行一些基准测试......


Apple 的文档说使用纹理图集将提高应用程序的性能。基本上,允许您的应用程序利用批量渲染。然而...

测试(https://github.com/JRam13/JSGlitch):

结果:

在此处输入图像描述

反复测试表明,使用 xcassets 比 FPS 中的 atlas 表现更好。不过,atlas 似乎确实比 xcassets 管理内存稍好。

有谁知道为什么这些结果表明 images.xcassets 比图集有更好的性能?


我提出的一些假设:

  • xcassets 比 atlasas 优化得更好。
  • atlasas 擅长在一次绘制过程中绘制大量图像,但重复精灵的开销更大。如果为真,这意味着如果您的精灵多次出现在屏幕上(在我的原始游戏中就是这种情况),最好将其从图集中删除。
  • 必须填写地图集表以优化性能

更新

对于下一个测试,我继续并在它离开屏幕后从父级中删除了精灵。我还使用了 7 个不同的图像。由于绘制次数,我们应该看到使用 atlas 的巨大性能提升,但是......

在此处输入图像描述

0 投票
1 回答
450 浏览

ios - Sprite Kit中的纹理图集不起作用

我今天对 XCode 感到非常沮丧。我已经看过这个问题的答案:Sprite Atlas and @2x images但是,那个答案不起作用。

所以,问题来了:

-我在 XCode 中有一个尺寸为 178x50 的精灵,在我的代码中,我加载[SKSpriteNode spriteNodeWithImageNamed:@"image"];并且该代码运行得很好。我的图像被命名为“image@2x.png”并且在我的项目中。

所以今天,我想为它制作动画。我制作了名为“default01.png, default02.png .... default10.png”的文件,并将它们放在扩展名为 .atlas 的文件夹中。拖入我的项目,添加它们,将我的代码行更改为[SKSpriteNode spriteNodeWithImageNamed:@"default01"];Just 以确保一切正常。加载游戏,显示的精灵比正常大得多。哦,忘了添加@2x 后缀。所以,我通过并添加了它们......同样的问题继续存在。我在这个网站上看到了上面的答案,所以我删除了图集,制作了一个已经添加了 @2x 后缀的新图集,然后将该图集添加到项目中。还是同样的问题!

在我的元素检查器中(我相信这就是它的名称),我可以看到两个图像的尺寸实际上是完全相同的。它们看起来一模一样。它们都有@2x 后缀。然而,从图集加载会以更大的尺寸显示图像。

不知道该怎么做。

0 投票
1 回答
97 浏览

opengl - SpriteKit 自动生成的图集大小不是 2 的幂

所以,我正在做一个有一些大纹理的项目,最近我决定按场景分割成不同的图集,这样当在场景中导航时,SpritKit 可以真正摆脱未使用的纹理

(由于我无法手动控制内存使用,我希望 SpriteKit 足够聪明,能够知道何时根本不使用纹理图集并在需要时释放它)。

现在,在进行此更改后,我去查看生成的图集,令我惊讶的是它们的大小不是 2 的幂,这是您在 Cocos2D 中学到的第一件事。(即 540x540 的纹理实际上最终会在 OpenGL 中成为 1024x1024,因此如果可能的话,使用 1024x512 甚至填充尽可能多的精灵而不浪费内存更有意义)

如果这在 SpriteKit 中相同,或者知道它实际上是如何工作的?也许不拆分地图集更有意义,因为我最终可能会使用与自动生成的糟糕地图集相同甚至更多的内存......