使用 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 偏移量。
我一直在尝试减少我的体素/平面地形生成器中使用的代码,并编写了这个函数以便在每次我需要添加一组新的 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 偏移量。