问题标签 [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 回答
174 浏览

ios - 如何处理多个图集文件

我在名为 myImages.atlas 的文件夹中有一堆图像。这些图像放在一起将占用超过 2048x2048 的尺寸。根据 Apple 文档,我预计 XCode 会自动将其分解为多个文件。

但是当我尝试编译它失败并出现错误:

有谁知道 XCode 是否可以处理这个场景,如果可以,我可能做错了什么?

0 投票
1 回答
1019 浏览

ios - 纹理图集中的纹理未加载或出现

由于某些奇怪的原因,我的纹理图集中的纹理没有加载。我不知道为什么。

下面是我通常如何声明/编码纹理

}

我的纹理图集的名称是 sprites.atlas 任何帮助将不胜感激,谢谢

0 投票
3 回答
6010 浏览

unity3d - 在 Unity 中使用自定义着色器正确平铺图集纹理

这有点复杂,但我希望它归结为一个非常简单的问题。所以事情是这样的:我使用 Unity 在运行时从一个 bsp 文件生成地图游戏对象,该文件有一大堆顶点、面、uvs、纹理引用等。创建的网格完全按照应有的方式出现,并且所有纹理都很好。但是有一个问题,使用如此多的材质创建的网格如此之多,导致许多绘制调用使程序变慢。因此,我搜索了一种减少绘图调用的方法,并找到了解决方案。将所有网格组合成一个大网格,并通过组合所有使用的纹理来创建纹理图集。结合网格效果很好,结合纹理效果也很好。然后我遇到了uv映射的问题。所以我从 NVidia 白皮书中找到了一个解决方案来制作一个自定义着色器,它使用 tex2d 函数使用 uv 位置及其导数从纹理中插入纹素。我认为这会奏效,但我的网格有非常奇怪的三角形,我认为它们正在破坏这个解决方案。在下图中,您可以看到网格合并时与分离时的区别:

具有更改的 UV 和自定义着色器的组合网格

使用原始 UV 分离网格

这是我在着色器中用于设置模型颜色的代码:

如您所见,我添加了第二个 UV,它是原始 UV 的非平铺版本。我通过使用 frac() 函数来做到这一点,但在 C# 代码中而不是在着色器中。由于纹理可以有不同的大小,我必须在进入着色器之前计算 UV,因为当时我可以访问纹理大小。

这是我用来计算 2 个 UV 的代码:

数组 uvReMappers 是使用 Texture2D 函数 PackTextures() 时创建的 Rect 数组。

抱歉花了这么长时间,但这是我的问题:为什么纹理会扭曲。是因为网格的三角化方式还是因为我编写自定义着色器的方式。最后我该如何解决它。

感谢您的时间。很抱歉写了这么多,但我以前从未发布过问题。我总是在网上找到几乎所有问题的答案,但我一直在寻找如何解决这个问题的几天。我觉得它可能太具体而无法找到答案。我希望我已经提供了足够的信息。

0 投票
1 回答
817 浏览

opengl - OpenGL 4.4 纹理图集工件


我正在使用 OpenTK 用 C# 编写一个小型 OpenGL 平铺地图渲染器。为了渲染图块,我首先创建了一个顶点数组,然后创建了一个顶点缓冲区。
接下来,我遍历所有图块并根据图块类型将两个三角形添加到具有相应顶点(纹理坐标、颜色、位置)的顶点缓冲区。
为了避免昂贵的纹理切换,我使用了一个包含所有平铺纹理的大纹理,名为纹理图集。
但是我在使用纹理图集时遇到了问题。
问题是,如果我缩小并四处移动相机,我会在某些图块的边缘出现一些伪影。
我在互联网上找到的解决方案是......

  1. ...用半像素校正计算纹理坐标。
  2. ...使用纹理数组

我尝试的第一个,但没有达到预期的效果(下面有更多解释)。
第二个我不知道如何使用纹理数组,我在互联网上找不到太多关于纹理数组的信息。

我使用了以下纹理过滤器:

半像素校正的纹理坐标计算:

没有半像素校正的纹理坐标计算:

一个带有半像素校正的图块:
一张带半像素校正的图块

一个没有半像素校正的图块:
一块没有半像素校正的图块

具有半像素校正的多个图块:
具有半像素校正的多个图块

没有半像素校正的多个图块:
没有半像素校正的多个图块

0 投票
0 回答
110 浏览

ios - 如何检查 Xcode 生成的 .spriteatlas 大小?

我正在使用纹理图集来处理我的图像。我没有自己创建地图集,但是我让 Xcode 为我做这件事:

在此处输入图像描述

我的问题是:我怎样才能看到这个文件或知道它的属性(我的意思是,大小和重量)?如果尺寸超过 4098 x 4098 像素的最大尺寸,我怎么知道?

0 投票
0 回答
44 浏览

sprite-kit - TextureAtlas RGBA4444_COMPRESSED 在 ios7.1 中不起作用

我创建了一个 SpriteKit 游戏,并尝试按照 Apple 最佳实践使用 RGBA444_COMPRESSED 纹理图集。但是,在 iOS7.1 / iPhone4 上,来自纹理图集的图像在屏幕上显示为两倍大小,并且无法正确渲染。

我找不到任何解决方法。知道如何解决这个问题吗?

0 投票
1 回答
459 浏览

android - libgdx 处理来自 textureatlas 的精灵

如果我调用sprite.getTexture().dispose();从 aTexture中检索到的a ,则TextureAtlas整个屏幕都会变黑。

坠落的物体

我已经设法解决了这个问题,方法是不调用从课堂disposetexture检索到的sprite内容。FallingObject我通过声明NULL精灵来清除引用:

但现在我害怕内存泄漏!这是处置 Sprite 的正确方法吗?

0 投票
1 回答
440 浏览

ios - SpriteKit 加载纹理的第一次延迟,即使预加载也是如此

这是我的问题:尽管做了这些:

1) 预加载我所有的纹理图集

2) 将我的地图集存储在单例中,这样它们就不会被 ARC 处理掉

3) 将我所有的动画数组存储在 Singleton 中

仅在第一次将敌人添加到我的场景时,SpriteKit 仍然会出现短暂的“滞后抖动”。纹理绘制一次后,当该纹理添加到场景中时,它不再滞后。最终在屏幕上绘制纹理时,可以看到内存在增加,看起来它们没有被预加载。

我目前正在使用启动时在我的 AppDelegate 中预加载我的所有纹理图集......

primaryAtlas 是存储在 Singleton 中的所有 4 个图集的数组。

让我指出一些我已经尝试过的事情以及我当前的设置是什么。

1)我的动画的帧数组存储在单例中,并从位于不同单例中的 Atlases 中获取它们的图像。他们曾经在同一个单身人士中。

2)我尝试将我所有的纹理存储在一个单例中,这些纹理都是从地图集中加载的。但是目前我的动画被存储了,而我的单个纹理是从图集中获取该纹理的函数。

3)我已经关闭了敌人的所有动画(不要运行SKAction)并且当他们被添加而不是动画时仍然会发生抖动。

我已经尝试解决这个问题很长时间了,老实说似乎没有解决方案。

我在这里找到了一个类似的 StackOverflow 问题,但没有答案:Spritekit: First texture draw slow (preloaded)

这是我使用 Instruments 进行的一些分析的图片。 仪器捕捉

0 投票
1 回答
70 浏览

arrays - SKTextures 未加载到 iPod Touch 上的数组中

我的 SpriteKit 游戏遇到了一个非常奇怪的问题。它在我的 iPad 和 iOS 模拟器上运行良好,但是当我在 iPod Touch 上运行它时,出现错误。我找到了错误的来源,在这里,我尝试访问纹理数组中的一个项目:

错误基本上是说 Frames[0] 不存在,实际上,在 iPod Touch 上,当我打印数组中的项目数时,什么都没有。在其他设备上,阵列具有它应具有的所有纹理。

这是我将纹理图集中的一些纹理加载到动画数组中的位置和方式:

当它在除 iPod Touch 之外的任何其他设备上运行时,我的图集中的纹理会加载到数组 Frames 中。但是,在 iPod Touch 上,没有纹理加载到数组中。这是纹理图集的图像:链接到纹理数组的图像

同样,纹理完美地加载到阵列中,并在 iPad 和 iPhone 模拟器以及真正的 iPad 设备上完美地制作动画。它只是在 iPod Touch 上不起作用,并且该错误导致应用程序无法加载。iPod touch 运行 iOS 9,就像其他设备一样。

任何帮助表示赞赏!谢谢!

0 投票
2 回答
861 浏览

libgdx - 纹理图集文件中索引的含义

我正在关注纹理图集上的 libgdx 教程。这是纹理图集文件的摘录。参数是什么意思,index在什么情况下对程序员有用?所有纹理区域都有它,并且在所有纹理区域中都是相同的,即-1。