踢球者足球即时指数盘口: 技術討論 生成mesh時生成不全的問題

3
回復
390
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
7日久生情
2001/5000
排名
927
昨日變化

皇冠网即时指数 www.863375.live 12

主題

359

帖子

2001

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
2401
好友
2
蠻牛幣
4361
威望
0
注冊時間
2013-8-21
在線時間
510 小時
最后登錄
2020-1-19

活力之星

50蠻牛幣
通過讀取外部的頂點數據文件進行mesh的生成過程中,使用的模型頂點數少的話,生成出來的模型就很完整,但是如果數據一多,生成出來的mesh模型就出現了很多地方沒有生成,出現破面的情況,希望遇見過或知道原因的大佬指導指導

頂點數據多.png (19.4 KB, 下載次數: 18)

頂點數據多時生成

頂點數據多時生成

頂點數據少.png (63.54 KB, 下載次數: 18)

頂點數據少時生成

頂點數據少時生成

代碼.png (77.68 KB, 下載次數: 18)

代碼.png
7日久生情
2001/5000
排名
927
昨日變化

12

主題

359

帖子

2001

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
2401
好友
2
蠻牛幣
4361
威望
0
注冊時間
2013-8-21
在線時間
510 小時
最后登錄
2020-1-19

活力之星

來自 2#
樓主 2019-11-22 10:47:17 只看該作者
我自己的處理方式就是:將所有的頂點數按照一定的比例,最好是能夠被3整除的比例進行分割,這樣的話每一個單獨的mesh的個數就不會很多,就能夠完整的顯示出來,具體代碼如下:
[C#] 純文本查看 復制代碼
    public void CreateObject(string _path,List<Vector3> _vertices,List<Vector3> _normals,List<int> _triangles)
    {
        //根節點
        GameObject root = new GameObject(Path.GetFileNameWithoutExtension(_path));
        root.transform.localPosition = Vector3.zero;
        root.transform.localScale = Vector3.one;

        int count = _normals.Count / singleTrianglesNumber;
        count += (_normals.Count / singleTrianglesNumber > 0) ? 1 : 0;

        for (int i = 0; i < count; i++)
        {
            GameObject child = new GameObject(Path.GetFileNameWithoutExtension(_path) + "_" + i);
            child.transform.SetParent(root.transform, false);
            child.transform.localPosition = Vector3.zero;
            child.transform.localScale = Vector3.one;

            MeshFilter mf = child.AddComponent<MeshFilter>();
            MeshRenderer mr = child.AddComponent<MeshRenderer>();
            Material mat = new Material(Shader.Find("Standard"));
            //Custom/TwoSided       Standard

            int startIndex = i * singleTrianglesNumber * 3;
            int length = singleTrianglesNumber * 3;

            if ((startIndex + length) > _vertices.Count)
            {
                length = _vertices.Count - startIndex;
            }

            if (length > 0 && startIndex <= _vertices.Count)
            {
                List<Vector3> vertices = _vertices.GetRange(startIndex, length);
                List<Vector3> normals = _normals.GetRange(startIndex, length);
                List<int> triangles = _triangles.GetRange(0, length);

                Mesh mesh = new Mesh();
                mesh.name = child.name;
                mesh.vertices = vertices.ToArray();
                mesh.normals = normals.ToArray();
                mesh.triangles = triangles.ToArray();
                mesh.RecalculateNormals();
                mf.mesh = mesh;
                mr.material = mat;
            }

            if ((startIndex+length) >= _vertices.Count)
            {
                break;
            }
        }
    }
5熟悉之中
548/1000
排名
6686
昨日變化

4

主題

34

帖子

548

積分

Rank: 5Rank: 5

UID
157026
好友
1
蠻牛幣
353
威望
0
注冊時間
2016-7-15
在線時間
311 小時
最后登錄
2019-12-9
板凳
2019-11-21 18:26:31 只看該作者
分UV了嗎
7日久生情
2001/5000
排名
927
昨日變化

12

主題

359

帖子

2001

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
2401
好友
2
蠻牛幣
4361
威望
0
注冊時間
2013-8-21
在線時間
510 小時
最后登錄
2020-1-19

活力之星

地板
樓主 2019-11-22 10:40:15 只看該作者

沒有加UV,但是我找到處理方式了,就是在生成mesh的時候按照一定的比例進行分割,將整體分割成多個小的mesh就沒有問題了
您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

{ganrao}