问题标签 [texture-packing]

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 投票
1 回答
1090 浏览

bin-packing - C#算法从一些图像生成图像(2048x2048)

我想做的是创建一个图像(在我的情况下为 2048x2048)该算法应该以这种方式工作:

-用户从文件夹中选择一些图像并告诉我的程序“生成图像”

- 程序检查是否可以将所有图像放在单个图像中(大小问题),否则返回错误消息

- 程序找到将所有图像放入图像中的正确方法,然后提示用户选择保存路径(显然旧图像不应调整大小/剪切)

问题显然是最后一步,我实际上不知道该怎么做,程序还应该检查另一件事,如果图像文件名是 myimage_1 并且有一个“myimage_2”,那么这些图像应该放在彼此附近(对于 3,4 等等,obiusly 相同)

有人可以帮我弄这个吗?

0 投票
2 回答
9766 浏览

algorithm - 有效地将二维形状放置在矩形中。如何接近它?

我一直在七个互联网上进行广泛搜索,但无济于事。最接近我需要的似乎是切割库存问题,仅在 2D 中(这令人失望,因为 Wikipedia 没有提供有关如何解决该问题的任何说明)。另一个相似的问题是UV 展开。那里有解决方案,但仅限于您从各种 3D 软件的附加组件中获得的解决方案。

长话短说-我想要的是:给定一个已知宽度和高度的矩形,我必须找出可以在该矩形内放置多少个已知尺寸(可以随意旋转)的形状(多边形)。

例如,我可以选择一个 T 形块并在同一个矩形中以一种有效的方式将它们打包,从而每个矩形有 4 个形状

在此处输入图像描述

以及根据它们的边界框平铺它们,在这种情况下我只能适合 3

在此处输入图像描述

但是,当然,这只是一个例子……我认为解决这个特殊情况并没有多大用处。我现在能想到的唯一方法要么是回溯它们的复杂性,要​​么只解决这个问题的特定情况。所以......有什么想法吗?

0 投票
0 回答
260 浏览

perlin-noise - 纹理中的 Tilable 3d 噪点?

我一直在寻找答案,但我还没有找到任何东西。这是我的问题:

您能否将预先计算的噪声打包到 2d 纹理中,以便能够计算合理的 3d 噪声传真,而无需使用完整的 3d 噪声算法进行计算。

我最初的想法是通过 Y 噪声获取 X 的 Z 切片并将它们并排打包,然后为每个像素计算“低”和“高”噪声像素,并在两个 Z 样本之间进行加权插值。不用说,这不是很好。

我知道各种会产生噪音的着色器,但总的来说,由于硬件规格低以及 mfrs 实施的各种优化,它们在移动平台上存在问题,因此动态计算是不可行的。

0 投票
1 回答
494 浏览

ios - iOS 中的纹理和动画

我正在开发一款启用 iPhone 视网膜的游戏。

这个游戏有很多精灵表可以使用。MyQuestion 哪个更好用

  1. pvr
  2. pvr.gz
  3. pvr.ccz
  4. 或普通的png格式

这是使用精灵表的最佳实践。

0 投票
1 回答
323 浏览

bin-packing - 带静态矩形的矩形包装

我已经实现了一个类似于这里提到的矩形包装类。我的最终目标是将一些较小的精灵打包成一个大的精灵表。

我遇到的困难是想办法扩展该算法以允许静态矩形。即:在打包过程中位置保持静止并被有效视为要避开的障碍物的矩形。

我应该考虑另一种算法,或者可能是更有效的方法吗?

0 投票
0 回答
523 浏览

android - OpenGL ES 渲染故障

我有以下情况:

在我的游戏中,我在 IOS 或 Android 设备上的 openGL ES 1.2 上从纹理 Atlas 渲染瓷砖贴图。

纹理图集在每个子纹理之间有 2 个像素的填充。填充颜​​色为黑色,颜色清晰。

我的目标是支持尽可能多的不同屏幕分辨率。如果我的游戏不支持未缩放的屏幕分辨率,我想使用缩放作为后备策略来支持任何屏幕分辨率。

只要我渲染未缩放(模型矩阵中的比例 = 1.0),瓷砖贴图看起来很完美。我还可以超级平滑地滚动瓷砖地图而不会出现任何故障。

一旦我渲染了缩放的瓷砖贴图,当瓷砖贴图滚动时,瓷砖之间就会出现黑色条纹(黑色清晰的颜色用作纹理图集中子纹理之间的填充颜色)。

似乎由于某种原因,在缩放渲染和填充颜色被部分使用时,为我的子纹理指定的纹理坐标不知何故被超出了。

我试图找到一种可能的策略来避免这个问题。到目前为止,我想到了 2 个解决方案:

1)改变纹理坐标。将半个像素添加到 x 和 y,从宽度和高度中减去一个完整的像素。这可行,但渲染的瓷砖不清晰。

2) 仅在整数位置上移动 tilemap。有效,但滚动看起来很生涩。

3) 修改纹理图集并复制所有边界像素,将每个子纹理在每个方向上扩展 1 个像素。我还没有尝试过,在我修改我的纹理打包工具之前,我想问问这是否可行。(我想我读过一些关于这个策略的文章,但我再也找不到这篇文章了)

有没有人有这个问题的经验,并且可以指出我正确的方向?

0 投票
1 回答
1830 浏览

cuda - CUDA:如何使用纹理和 char4(或 int4)在每个线程的一个事务中读取 4 个(或 16 个)字符?

我在设备全局内存中有一个大型字符数组,由线程以合并方式访问。我在某处读过,我可以通过在每个线程的一个内存事务中读取 4 或 16 个字符来加快内存访问。我相信我必须使用纹理和 char4 或 int4 结构。但是,我找不到任何关于此的文档或示例。有人可以在这里提供一个简单的示例或指向我可以在哪里了解更多信息的指针吗?

在我的代码中,我将 char 数组定义为

如果我想使用纹理和 char4(或 int4),定义是什么?

非常感谢。

0 投票
1 回答
918 浏览

libgdx - LibGDX 纹理打包器

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

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

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

图像在游戏中完全缩小。

稍微放大。

完全放大,一切都很好。

0 投票
1 回答
524 浏览

java - libGDX - TextureRegion 在缩放时绘制很奇怪

有一个奇怪的问题。

我有一个带有四帧精灵动画的纹理。每个帧都作为一个 TextureRegion 加载。

大多数时候动画播放没有任何问题,但偶尔它会在一帧中绘制过多的纹理。

这是我的意思的一个例子:

在此处输入图像描述

如您所见,不明飞行物的左侧有一个红色条。该红色条是我的代码中所述的 TextureRegion 边界外部框架的一部分。(红框只是为了让我更容易测量,因为所有角落都是透明的)

这是纹理:

在此处输入图像描述

在上面的精灵表中,顶部幻灯片的红色框架的边界为 0、0、202、71。动画框架的 TextureRegion 为 1、1、200、69——任何时候都不应该据我所知,将显示红框。

我意识到作为一种解决方法,我现在可以将框架设置为透明,因为我有我需要的测量值,但我想保留红色框架以防我稍后需要再次进行测量,或者替换精灵图像等,而且真正的解决方法只是一个创可贴,而我希望找到一个合适的解决方案来解决问题的根源——它绘制错误的事实似乎表明一个比这种特殊情况下存在的问题更大的问题(例如,在一个密集的纹理中,它可能会从不同的精灵帧或什至不同的精灵或菜单图像或类似的东西中绘制像素)。

哦,最后一点,以防万一:当 SpriteBatch 显示图像时,它会根据 UFO 的移动应用旋转(向左移动时向左倾斜等)。有故障的红色条有时会随机出现在顶部、右侧、底部或左侧(尽管大多数情况下它们根本不会出现),但它们似乎只在 UFO 旋转为零时出现。(再次,我意识到我可以只检查旋转是否为 0,然后在没有旋转图的情况下调用 SpriteBatch.draw() 方法,但这也是治疗症状而不是解决问题的根源)。

有学问的大师有什么想法吗?

0 投票
1 回答
340 浏览

image - 将任意正方形打包成一个矩形

为了提供一些上下文,我有几个光照贴图,用于 3D 场景中的不同对象,我想将它们打包到一个纹理中。光照贴图是正方形的,并且具有不同的大小,不一定是 2 的幂(尽管可以包括这个限制,如果它可以提供更好的解决方案)。生成的纹理的大小是任意的,但应尽可能为方形。我必须保持像素完美,不能使用旋转。速度不是问题,这不用于对时间要求严格的应用程序。

我在 GameDev.SE找到的基本算法是这样工作的:

  1. 按区域对光照贴图进行排序,从大开始
  2. 以光栅扫描顺序遍历输出纹理[固定宽度或根据需要增加]
  3. 将光照贴图放置在第一个可能的位置
  4. 重复下一个光照贴图,直到完成

虽然这听起来合理且易于实现,但我想知道该算法是否适合我的目的,或者是否有更简单的解决方案。特别是,我对以下内容感兴趣:

  • 我可以以某种方式利用只有方形纹理吗?
  • 有没有办法预先计算输出的最佳方形尺寸?
  • 我可以充分利用只有“二的力量”纹理吗?