[英]Unity's Mesh.CombineMeshes() seems to delete vertex information
我有一個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);
}
}
第一次調用時,生成的網格按預期呈現,但是第二次( firstMeshFlag = false
),網格消失。
該應用程序在 Android 手機上運行,並使用 Google AR 和 Googles Depth API,據我所知,尚不支持即時預覽。 所以我現在唯一的調試方法是將信息打印到 UI。
到目前為止我發現:網格消失的原因是,雖然它保存了正確數量的頂點,但所有頂點和法線值都設置為零。
CombineMeshes()
真的是向現有網格添加額外頂點、法線等的唯一方法嗎?所以答案很簡單。 我沒有向CombineInstance
s 添加變換矩陣,並且CombineMeshes()
方法中的參數useMatrices
默認為 true。
因此,解決方案就像將方法的使用更改為以下一樣簡單:
combinedMesh.CombineMeshes(new CombineInstance[]
{
new CombineInstance
{
mesh = newMesh
},
new CombineInstance
{
mesh = oldMesh
}
}, true, false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.