如何计算平面多边形网格的 UV
How to calculate UVs of a flat poligon mesh
我的游戏生成了一个平面(建筑物的地板)。如图所示是一个扁平的多边形网格:
多边形是程序生成的,每次都会不同。
我需要映射 UV 坐标,以便正确显示标准方形纹理,例如砖块地板。
为每个顶点分配正确的 UV 坐标的最佳方法是什么?
对于不规则形状,您可能需要 "paste" 网格上的纹理(想象一下,在您的网格上粘贴一个矩形贴纸并切掉落在您的网格形状之外的那些)。
对于那种类型的映射,您可能需要使用 Mesh.bounds
,它会在 本地坐标 中为您提供 mesh
的 bounding box
],这是你要"paste"你的纹理的区域。
Mesh mesh = GetComponent<MeshFilter>();
Bounds bounds = mesh.bounds;
获取网格的顶点:
Vector3[] vertices = mesh.vertices;
现在做映射:
Vector2[] uvs = new Vector2[vertices.Length];
for(int i = 0; i < vertices.Length; i++)
{
uvs[i] = new Vector2(vertices[i].x / bounds.size.x, vertices[i].z / bounds.size.z);
}
mesh.uv = uvs;
我的游戏生成了一个平面(建筑物的地板)。如图所示是一个扁平的多边形网格:
多边形是程序生成的,每次都会不同。
我需要映射 UV 坐标,以便正确显示标准方形纹理,例如砖块地板。
为每个顶点分配正确的 UV 坐标的最佳方法是什么?
对于不规则形状,您可能需要 "paste" 网格上的纹理(想象一下,在您的网格上粘贴一个矩形贴纸并切掉落在您的网格形状之外的那些)。
对于那种类型的映射,您可能需要使用 Mesh.bounds
,它会在 本地坐标 中为您提供 mesh
的 bounding box
],这是你要"paste"你的纹理的区域。
Mesh mesh = GetComponent<MeshFilter>();
Bounds bounds = mesh.bounds;
获取网格的顶点:
Vector3[] vertices = mesh.vertices;
现在做映射:
Vector2[] uvs = new Vector2[vertices.Length];
for(int i = 0; i < vertices.Length; i++)
{
uvs[i] = new Vector2(vertices[i].x / bounds.size.x, vertices[i].z / bounds.size.z);
}
mesh.uv = uvs;