【问题标题】:Unity: mesh.triangles = t; mesh.triangles == t returns false统一:mesh.triangles = t; mesh.triangles == t 返回 false
【发布时间】:2020-07-25 16:32:06
【问题描述】:

我正在编写一个程序,其中会生成一个大而复杂的网格。起初我生成了大量较小的网格,效果很好,但后来我决定将它们合并在一起,一些三角形被破坏了。 经过一番查找,我设法查明了问题:

Debug.Log(fullTriangles == fullTriangles);
boxMesh.triangles = fullTriangles;
Debug.Log(boxMesh.triangles == fullTriangles);

这只发生在我使用大网格时。对于许多较小的网格,两个调试都返回 true。

这是网格的图片。它在很多地方都在自己循环,绝不是凸面的,有几个浮岛,而且从渲染的角度来看通常非常困难。

其他可能重要的信息:

  • 大网格中的许多小网格不共享大网格中的任何顶点,但有些顶点的位置相同
  • 每个小网格都由一个或多个共享顶点的三角形组成
  • 小网格不是子网格

为什么会发生这种情况,我可以做些什么来解决它?

【问题讨论】:

    标签: c# unity3d mesh procedural-generation


    【解决方案1】:

    我猜你的网格有太多顶点,看看mesh index format

    为避免此问题,您可以运行mesh welder,或将较小的网格一起批处理。您还可以将较小的网格合并成一个较大的网格,但要计算合并后的网格顶点数。如果超过顶点数限制,则创建另一个合并网格(依此类推)。

    附带说明,请记住,使用“==”比较数组不会比较数组中的值,而是比较数组引用。你可以使用Enumerable.SequenceEqual,或者运行一个简单的for循环。

    【讨论】:

    • 原来网格有 67272 个顶点。更改网格索引格式修复了它。谢谢你的回答!
    • 很高兴听到!很高兴我能帮上忙。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2012-08-28
    相关资源
    最近更新 更多