【问题标题】:Unity - Script generated mesh has incorrect lightingUnity - 脚本生成的网格具有不正确的照明
【发布时间】:2018-05-12 16:10:05
【问题描述】:

我有一个脚本可以将一个立方体分成四个相等的三棱柱,GameObject Panel 是破碎的原始对象。每个棱镜完全由脚本通过将顶点和三角形分配给空白网格来创建,并且原始对象被破坏。

    // 2D Points which will connect to the center to form triangles
    List<Vector2> shatterPoints = new List<Vector2> {new Vector2(-0.5f, -0.5f),
        new Vector2(-0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0.5f, -0.5f)};

    // Generate each fragment
    for (int i = 0; i < shatterPoints.Count; i++) {
        GameObject Fragment = new GameObject("Empty"); // Create game object
        Fragment.AddComponent<MeshFilter>();
        Fragment.AddComponent<MeshRenderer>();

        Vector3 point1 = shatterPoints[i]; // Grab the two edge points for this fragment
        Vector3 point2;
        if (i + 1 == shatterPoints.Count) {
            point2 = shatterPoints[0];
        } else {
            point2 = shatterPoints[i + 1];
        }

        Mesh FragMesh = new Mesh(); // Create the mesh

        FragMesh.vertices = new Vector3[] {point1 + Vector3.forward * 0.5f,
            point2 + Vector3.forward * 0.5f, new Vector3(0f, 0f, 0.5f),
            new Vector3(0f, 0f, -0.5f), point2 - Vector3.forward * 0.5f,
            point1 - Vector3.forward * 0.5f};
        FragMesh.triangles = new int[] {1,0,2,  5,4,3,  0,5,3,  3,2,0,  4,5,0,  0,1,4,  1,2,3,  3,4,1};

        // Copy important properties from the original piece to the fragment
        Fragment.GetComponent<MeshFilter>().mesh = FragMesh;
        Fragment.transform.position = Panel.transform.position;
        Fragment.transform.rotation = Panel.transform.rotation;
        Fragment.transform.localScale = Panel.transform.localScale;

        Fragment.GetComponent<Renderer>().material = Panel.GetComponent<Renderer>().material;
        FragMesh.RecalculateNormals();

        // Add force here later (and a rigidbody while you're at it)
    }

    Destroy(Panel);

以下是立方体破碎前后的照片:

Cube before shattering

Cube after shattering and manual displacement of fragments

虽然我重新计算了脚本中每个片段的法线,但照明似乎不正确。我是程序网格生成的新手,所以任何人都可以对此有所了解吗? (没有双关语)谢谢您的宝贵时间。

【问题讨论】:

    标签: unity3d mesh


    【解决方案1】:

    您看到的 atrifacts 是由于所有新创建的网格的平滑组都相同。肯定的方法是为每个面创建单独的 verecies,而不是统一不会尝试平滑边缘,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多