C# 统一';s Mesh.CombineMeshes()似乎删除了顶点信息

C# 统一';s Mesh.CombineMeshes()似乎删除了顶点信息,c#,unity3d,C#,Unity3d,我有一个MeshFilter,我想将新网格附加到现有网格,这意味着我想向现有网格添加额外的顶点、三角形和法线 下面是我现在的做法: MeshFilter meshFilter = GetComponent<MeshFilter>(); Mesh newMesh = new Mesh(); newMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; // information set

我有一个
MeshFilter
,我想将新网格附加到现有网格,这意味着我想向现有网格添加额外的顶点、三角形和法线

下面是我现在的做法:

    MeshFilter meshFilter = GetComponent<MeshFilter>();
    Mesh newMesh = new Mesh();
    newMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
    // information set here is calculated beforehand
    newMesh.SetVertices(MeshVertecies);
    newMesh.SetNormals(MeshNormals);
    // GenerateTriangles creates the correct triangle indices 
    newMesh.SetTriangles(GenerateTriangles(DepthSource.DepthWidth, DepthSource.DepthHeight), 0);



    if (firstMeshFlag)
    {
        meshFilter.sharedMesh = newMesh;
        firstMeshFlag = false;
    }
    else
    {
        Mesh oldMesh = meshFilter.sharedMesh;
        Mesh combinedMesh = new Mesh();

        try
        {
            combinedMesh.CombineMeshes(new CombineInstance[]
            {
                new CombineInstance
                {
                    mesh = newMesh
                },
                new CombineInstance
                {
                    mesh = oldMesh
                }
            });

            meshFilter.sharedMesh = combinedMesh;
        }
        catch (Exception e)
        {
            //This just prints debug information to the UI 
            //(Application running on Android using Google Depth API, which is why I can't debug
            DebugInformation.Instance.AppendDebugText("\ncombine err: " + e.Message);
        }
    }
MeshFilter-MeshFilter=GetComponent();
网格newMesh=新网格();
newMesh.indexFormat=UnityEngine.Rendering.indexFormat.UInt32;
//此处设置的信息是预先计算的
设置顶点(网格顶点);
设置法线(网格法线);
//GenerateTriangles创建正确的三角形索引
SetTriangles(GenerateTriangles(DepthSource.DepthWidth,DepthSource.DepthHeight),0);
if(firstmesh标志)
{
meshFilter.sharedMesh=newMesh;
firstMeshFlag=false;
}
其他的
{
网格oldMesh=meshFilter.sharedMesh;
网格组合网格=新网格();
尝试
{
combinedMesh.combinedMesh(新CombineInstance[]
{
新组合仪表
{
网格=新网格
},
新组合仪表
{
网格=旧网格
}
});
meshFilter.sharedMesh=组合网格;
}
捕获(例外e)
{
//这只是将调试信息打印到UI
//(应用程序运行在Android上,使用谷歌深度API,这就是我无法调试的原因。)
DebugInformation.Instance.AppendDebugText(“\n组合错误:”+e.Message);
}
}
第一次调用此函数时,生成的网格将按预期进行渲染,但是第二次(
firstMeshFlag=false
)时,网格将消失

该应用程序运行在android手机上,使用谷歌AR和谷歌深度API,据我所知,谷歌深度API还不支持即时预览。因此,我目前唯一的调试方法是将信息打印到UI上

我目前发现的情况: 网格消失的原因是,当网格保持正确数量的顶点时,所有顶点和法线值都设置为零

  • CombineMeshes()
    真的是向现有网格添加额外顶点、法线等的唯一方法吗
  • 出现上述问题的原因可能是什么

  • 所以答案很简单。我没有向
    CombineInstance
    s添加变换矩阵,而
    CombineMeshes()
    方法中的参数
    useMatrices
    默认为true

    因此,解决方案非常简单,只要将方法的使用更改为以下内容:

    combinedMesh.CombineMeshes(new CombineInstance[]
                {
                    new CombineInstance
                    {
                        mesh = newMesh
                    },
                    new CombineInstance
                    {
                        mesh = oldMesh
                    }
                }, true, false);