使用 UV 布局,我如何才能最好地修改此函数以访问我的纹理的任何部分?

With a UV layout, how can I best modify this function to access any part of my texture?

我一直在尝试减少我的体素/平面地形生成器中使用的代码,并编写了这个函数以便在每次我需要添加一组新的 UV 时调用 - 在纹理贴图中表示四个顶点:

List<Vector2> _UVs(List<Vector2> UV, int x = 0, int y = 0)
{
    List<Vector2> UVReturn = new List<Vector2>();
    UVReturn = UV;

    UVReturn.Add(new Vector2 (0f, 0f) * x);
    UVReturn.Add(new Vector2 (0.125f, 0) * y);
    UVReturn.Add(new Vector2 (0.125f, 1)* y);
    UVReturn.Add(new Vector2 (0f, 1f) * x); 

    return UVReturn;
}

但是,我似乎无法确定要在修饰符中写入的确切位置,它们似乎每次都把事情搞砸了。我目前在 1024 文件中有一行 128x 纹理。目前的 UV 布局看起来很准确,除了乘法。删除它,它会完美地显示第一个纹理。可以通过哪些方式改进?我的目标是让它可以用于任何四顶点平面。

你不能就这样相乘,那是完全不同的东西。

UVReturn.Add(new Vector2 (x * 0.125f, 0f));
UVReturn.Add(new Vector2 ((x + 1) * 0.125f, 0));
UVReturn.Add(new Vector2 ((x + 1) * 0.125f, 1));
UVReturn.Add(new Vector2 (x * 0.125f, 1f));

您需要 偏移 UV 坐标 - 这意味着您必须将 x * widthOfOne 添加到 x 坐标,将 y * heightOfOne 添加到 y 坐标。我的示例仅显示 x 偏移量,但您可以轻松扩展它以允许 y 偏移量。