簡體   English   中英

Unity 的 Mesh.CombineMeshes() 好像刪除了頂點信息

[英]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。

到目前為止我發現:網格消失的原因是,雖然它保存了正確數量的頂點,但所有頂點和法線值都設置為零。

  1. CombineMeshes()真的是向現有網格添加額外頂點、法線等的唯一方法嗎?
  2. 所描述問題的原因可能是什么?

所以答案很簡單。 我沒有向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM