我需要一些帮助,以下列方式将2X2矩阵转换为4X4矩阵:
A = [2 6;
8 4]
Run Code Online (Sandbox Code Playgroud)
应成为:
B = [2 2 6 6;
2 2 6 6;
8 8 4 4;
8 8 4 4]
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我一直在尝试在 Unity 中使用四边形来显示纹理来制作无限滚动的 2D 背景。我的想法是根据玩家的位置改变四边形的偏移。由于某种原因,当我更改偏移量时,我的图像无法正确重复,并且一旦达到偏移量 2,图像就会完全消失。
如果有人知道如何解决这个问题,如果您能回复我,我将不胜感激。
我试图使用TextureBrush在尺寸宽度= 1000,高度= 16的矩形区域上平铺图像(16x16)以获得像UI一样的条带.
Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
{
e.Graphics.FillRectangle(brush, myIconDrawingRectangle );
}
Run Code Online (Sandbox Code Playgroud)
当我用x = 0绘制时,y = 0平铺从(0,0)开始按预期发生.
当我用x = 0绘制时,y = 50平铺从(0,50)开始,但绘制矩形不是从图像的开头开始.它从图像的裁剪部分开始,然后重复.
怎么解决这个?
PS:我不想在DrawImage上重复手动循环.
我试图从Tiled实用程序的地图格式文档中找出这段代码的目的.
const int gid = data[i] |
data[i + 1] << 8 |
data[i + 2] << 16 |
data[i + 3] << 24;
Run Code Online (Sandbox Code Playgroud)
看起来有一些"or-ing"和位移,但我不知道这是什么目的,在使用平铺程序的数据的情况下.
我遇到了一个需要解决难题的问题.
例如,我的(可变)区域为20x20(例如米).存在许多具有可变尺寸的给定组件.如4x3,4x2,1x5件等.这些件也可以转为添加,以增加我的问题更多的痛苦.拼图的重点是用给定的部分填充20x20的整个区域.
什么是一个很好的启动算法来实现这样的壮举?我正在考虑使用计算开放空间的启发式算法(出于效率目的).
提前致谢
我想设置一个带有平铺位图的视图背景,但是平铺需要锚定到左下角,而不是左上角(默认).例如,如果瓷砖是下面的笑脸,我希望它像平铺一样:

使用xml drawables我可以实现平铺(使用tileMode="repeat")或底部定位(使用gravity="bottom"),但是无法将两者结合使用,即使文档中也这样说:
机器人:TILEMODE
关键词.定义切片模式.启用切片模式后,将重复位图.启用切片模式时,将忽略重力.
虽然它没有内部支持,有没有办法实现这一点,也许使用自定义视图?
考虑A = [ 200000 x 1]矢量.我有另一个矢量idx = [200000x1].我想平铺A这样ithA的每个元素都是平铺idx(i)时间.
例如:
A idx output
2 2 2
3 1 2
4 3 3
5 1 4
. . 4
. . 4
. . 5
. . .
Run Code Online (Sandbox Code Playgroud)
任何非循环的想法?
我无法找到答案,为什么我为瓷砖地图制作的瓷砖板在使用libGDX时在屏幕上移动时会产生垂直的白线和抖动的水平线.
这是一段显示白色垂直线的视频:https://www.youtube.com/watch?v = 34V64WacMo4 这是一个显示水平抖动线:https://www.youtube.com/watch?v = LizBZzxmy0
为了比较,这是我今年早些时候没有使用GDX的项目.你可以看到瓷砖地图顺利移动,没有任何明显的看法:https://www.youtube.com/watch?v = VvdPdA_253k
当我将这个非常好的瓷砖放入我们的引擎时,您可以看到各个瓷砖周围的外观.即使我在当前引擎中使用此项目中完全相同的tileheet也是如此.
我和我的伙伴都在调查导致这种情况的原因,即使我们找到了几个可能的答案,但没有任何效果.我们目前的解决方案感觉非常错误.我使用Photoshop来创建我的瓷砖表.我保持非常有条理,这样当它被导入到Tiled时,它是有效的.这是我一直在使用的测试表,用于创建上述示例的测试表:

作为一个实验,我的朋友创建了一些简单的32x32磁贴,并使用TexturePacker打包它们,然后在Tiled中使用它们.最终结果就是这个文件:

如果你在图像编辑器中打开该文件,你会发现没有意义,瓷砖甚至不均匀.蓝色和绿色瓷砖是34x34,而红色和黄色是35x34.他说在TexturePacker中他已经将填充和间距都定义为2.所以首先我很困惑32x32磁贴如何以各种大小输出.然后他说他将其导入Tiled并将导入设置设置为33x33,间距和填充均为1.使用这些图块创建的地图似乎在我们的引擎中有效.这引起了一些问题.
首先,我不想使用TexturePacker,因为我不是一次创建一个图块,我有一个有组织的布局创建的主图块表.当导入到平铺时,TexturePacker的输出是不可行的混乱.我觉得我应该能够手工创建有组织的瓷砖表而不必依赖TexturePacker.此外,使用TexturePacker意味着我必须导出我的主表,然后手动将其刻录成单个图像,涉及的工作量会以指数方式增加工作量,因此避免这样做是最好的.
我还发现输出,将32x32瓷砖转换为34x34和35x34瓷砖会扭曲我的图形.这不是正确的方法.如何创建在平铺地图中使用并在GDX中使用的平铺图表,其显示方式与我在上面的第二个视频链接中演示的平铺图像一样流畅?
如果有兴趣,这是我们的应用程序的当前工作分支:https://github.com/vinbreauX/DULES
我不明白如何编写平铺代码以在网格上重复图像:材质包含纹理,所以TEXCOORD0应该使用它而不是“顶点”信息吗?
编辑:以前的代码:
顶点:
varying vec2 v_texCoord0;
void main() {
vec2 modXZ = vec2 (mod (a_position.x, u_widthImg),
mod (a_position.z, u_heightImg));
v_texCoord0 = modXZ / vec2 (u_widthImg, u_heightImg);
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = u_projTrans * u_worldTrans * vec4(a_position, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
片段:
uniform sampler2D u_texture0;
varying vec2 v_texCoord0;
void main() {
vec4 color1 = texture2D(u_texture0, gl_TexCoord[0].st);
gl_FragColor = vec4(v_texCoord0.x *color1, 0, v_texCoord0.y*color1, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
它说“构造函数 vec4 的参数太多”。我不知道这是什么意思,也许是关于gl_TexCoord[0].
编辑新代码:
顶点:
attribute vec3 a_position;
attribute vec3 a_normal;
attribute vec4 a_color;
attribute …Run Code Online (Sandbox Code Playgroud)