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);