gpt4 book ai didi

c# - 网格操作非常慢

转载 作者:行者123 更新时间:2023-11-30 14:44:55 24 4
gpt4 key购买 nike

我的程序在运行时接收到一个网格。网格可以由超过 200k 个顶点组成。我需要扭转它(由内而外)。我反转了索引,但我还需要反转法线。到目前为止,我使用了这个循环:

Vector3[] newnormals = new Vector3[mesh.normals.Length];
for (int i=0;i<mesh.normals.Length;i++)
{
newnormals[i] = -mesh.normals[i];
}

revMesh.normals = newnormals;

其中“mesh”是原始Mesh,当然“revMesh”是反转的Mesh。我不知道为什么,但是这个循环非常慢。在我的 i7 上需要很多秒。如果我将它替换为

revMesh.RecalculateNormals();

执行时间降至 100 毫秒以下。...

为什么我的日常工作如此低效?有什么办法可以加快速度吗?

最佳答案

也许在每次迭代中获取 mesh.normals[i] 会使它变慢,尝试:

Vector3[] newnormals= revMesh.normals;
for (int i=0;i<newnormals.Length;i++)
newnormals[i] = -newnormals[i];
revMesh.normals = newnormals;

Note: To make changes to the normals it is important to copy the normals from the Mesh. Once the normals have been copied and changed the normals can be reassigned back to the Mesh.

https://docs.unity3d.com/ScriptReference/Mesh-normals.html

你也可以这样做:(没有测试但我认为它有效)

using System.Linq;
revMesh.triangles = revMesh.triangles.Reverse().ToArray();

关于c# - 网格操作非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com