我对这个含糊不清的标题感到抱歉,但我并不确定如何在不具体的情况下提出这个问题。如果你建议一个更清晰的标题,我会尽快改变它。
无论如何,如果没有先提供一些背景资料,我不会认为我可以非常简洁地提出我的问题。在2D空间中,我正在创建"亩",其中包含" tiles"。
[一块64块瓷砖]
为了清楚起见,我们假设在这个特定的例子中,有12英亩,第一行有四个,第二行有四个,第三个有四个。每英亩有64个瓷砖,八个八格。
[12英亩,每个有64个瓷砖]
我正在生成纹理所需数量的英亩的宽度和高度,乘以每英亩的瓦片数量(在我们的示例中,纹理将是32像素宽[水平行中的英亩数量{ 4}乘以英亩{8}]中的瓦片数量,以及24像素高[垂直列中的英亩数量{3}乘以英亩{8}中的瓦片数量])。然后用perlin噪声填充纹理,我想用它来为每个瓷砖着色。
[单英亩,64块瓷砖,旁边为它生成的Perlin图像(按比例放大)。这会对每个图块应用轻微的随机颜色变化。]
我想为所有的土地生成一个图像,并在每次创建一个新的英亩时读取它,但其中存在问题,以及我的问题的主题。如何获得偏移,以便每个相邻的英亩继续模式?
[我想要的(为了得到这个,我只创建了一个更大的瓷砖)]
我目前正在使用的方法似乎无法正常工作,最终会创建如下内容。
以下是我目前用于查找(不正确,我假设)偏移的代码。链接指向Gist,其中粘贴了perlin生成函数和acre / tile生成函数。
int xOffset = ( parentAcreXIndex * desiredWidth );
int yOffset = ( parentAcreYIndex * desiredHeight );
new Color ( 0.000f, 0.502f + ( parentWorld.worldPerlin.GetPixel ( xOffset + ( desiredWidth - tileXIndex ), yOffset + ( desiredHeight - tileYIndex )).grayscale * 0.3f ), 0.000f, 1 );
Full class (Links to GitHub's Gist), the above line is at 100
我真的不知道还能说什么;我的思绪有点"有雾"从试图弄明白这一点,所以请原谅我,如果我留下了重要的东西。请告诉我,我会使用所需信息更新我的帖子。
另外,对于这个问题我很抱歉,一定很难理解。在我发布之后,我会仔细阅读几次,看看我是否可以改进措辞。
感谢您的时间! 迈克尔
感谢您看一下!原来问题是我用于可视化的飞机实际上是倒置的。我确保将来检查这样的简单事情,对不起给我们带来困惑!我已经离开了这个问题,因为我在这里给了足够的分数来发布图像,当我试图删除它时,这些点被撤销了。当我获得更多积分时,我会回来删除它。谢谢!
答案 0 :(得分:0)
你似乎在问这个问题:
如果我有一个像素网格,它被分组为“英亩”(32x32),我如何从给定像素(作为一英亩的行和列)映射到整个像素?
Acres从每第32个像素开始,因此对于给定的英亩(acreX,acreY)
acreOriginInTextureX = acreX * 8;
acreOriginInTextureY = acreY * 8;
因此,一英亩的给定图块(tileX,tileY)将是:
tilePosInTextureX = acreOriginInTextureX + tileX
= acreX * 8 + tileX
tilePosInTextureY = acreY * 8 + tileY
真的是这样:
tilePosInTextureX = acreX * tilesPerAcreX + tileX
......和Y一样。
注意:我假设到处都是零索引。如果没有,你需要从acreX,acreY,tileX,tileY中减去1,但不 tilesPerAcreX或Y.