c# - 如何在 Unity 中使用归一化值修复错误的程序网格
问题描述
在 Unity 中创建程序网格时,我遇到了标准化值的问题。我一直在关注catlikecoding的精彩教程,当我尝试为我的顶点使用标准化值时,我陷入了奇怪的行为。在某些情况下,xSize 和 ySize 网格组合都有效,但在其他组合中,网格会变形。让我举几个例子
- xSize = 35; y 大小 = 25;// 好的
- xSize = 350; y 大小 = 250;// 不好
- xSize = 150; y 大小 = 250;// 好的
- xSize = 350; y 大小 = 200;// 不好
- xSize = 1000; ySize = 750; // 不好
我用代表每 10 个顶点的球体说明了前 2 个案例。 35x25 案例 350x250 案例
我正在使用 Unity3d 2018.3
private void Generate()
{
GetComponent<MeshFilter>().mesh = mesh = new Mesh();
mesh.name = "Procedural Grid";
vertices = new Vector3[(xSize + 1) * (ySize + 1)];
Vector2[] uv = new Vector2[vertices.Length];
float multX = 1 / (float)xSize;
float multY = 1 / (float)ySize;
for (int i = 0, y = 0; y <= ySize; y++)
{
for (int x = 0; x <= xSize; x++, i++)
{
//vertices[i] = new Vector3(x, y);
var xNormalized = x * multX;
var yNormalized = y * multY;
vertices[i] = new Vector3(xNormalized, yNormalized);
uv[i] = new Vector2(xNormalized, yNormalized);
}
}
mesh.vertices = vertices;
mesh.uv = uv;
var triangles = new int[xSize * ySize * 6];
for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++)
{
for (int x = 0; x < xSize; x++, ti += 6, vi++)
{
triangles[ti] = vi;
triangles[ti + 3] = triangles[ti + 2] = vi + 1;
triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1;
triangles[ti + 5] = vi + xSize + 2;
}
}
mesh.triangles = triangles;
mesh.RecalculateNormals();
}
我希望网格在每种情况下都是 1x1,无论我使用哪个 xSize 或 ySize 网格。任何人都可以建议如何实现这一目标?
解决方案
所以我的朋友向我解释说,默认情况下,Unity 中的网格有 65535 个顶点限制。我必须很好地问我是否想要更多。我不得不添加
mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
后
mesh.name = "Procedural Grid";
这里有更多..
突然一切都按预期工作。谢谢大家的支持。
推荐阅读
- android - 如果Sqlite和Room都存在于Android中具有相同数据库名称的同一个项目中,会不会有任何冲突?
- ios - 显示额外行的文件标题注释
- java - 使用jpa hibernate高并发会无法获取JDBC Connection
- r - R中的切片/子集使用向量/矩阵/列表作为索引
- ansible - 尽管变量不为空,但获取 Ansible 运行时错误字典对象'没有属性'stdout_lines'
- tensorflow - export_inference_graph.py 与 export_tflite_ssd_graph.py
- ios - 如何在 iOS 13 集合视图组合布局上隐藏标题
- python - 如何使用多处理模块更新多维numpy数组的每个元素
- kubernetes - 如何在同一个 kubernetes 集群上部署多个前端应用程序,只有一个主机名
- javascript - chrome 77如何实现打印功能支持