Векторы объединенной сетки имеют значения x, y, z, равные нулю - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь объединить две сетки. Мой код показан ниже. CombineInstance 'Объединить' имеет правильные значения в своих вершинах. Однако объединенная сетка «RetMesh» имеет все вершины, равные (0,0,0). Я не понимаю, что я делаю неправильно.

Я прочитал учебники, которые я нашел в Интернете, и я не знаю, что я делаю неправильно.

void Start () {
    Mesh MM2 = testmeshfunc();
    GameObject GO;
    GO = new GameObject("MeshFromMPC", typeof(MeshFilter), typeof(MeshRenderer));
    GO.gameObject.transform.localScale = new Vector3(1, 1, 1);

    GO.gameObject.GetComponent<MeshFilter>().mesh = MM2;
}

Mesh testmeshfunc()
{
    Mesh RetMesh = new Mesh();

    Vector3[] V3A = new Vector3[4];
    Vector3[] V3B = new Vector3[4];
    int[] TrPtsA = new int[6];
    int[] TrPtsB = new int[6];

    Mesh mesha = new Mesh();
    Mesh meshb = new Mesh();

    var combine = new CombineInstance[2];

    V3A[0] = new Vector3(0, 0, 0);
    V3A[1] = new Vector3(0, 1, 0);
    V3A[2] = new Vector3(1, 1, 0);
    V3A[3] = new Vector3(1, 0, 0);

    TrPtsA[0] = 0;
    TrPtsA[1] = 1;
    TrPtsA[2] = 2;
    TrPtsA[0] = 2;
    TrPtsA[1] = 1;
    TrPtsA[2] = 3;

    mesha.vertices = V3A;
    mesha.triangles = TrPtsA;

    V3B[0] = new Vector3(0, 0, 0);
    V3B[1] = new Vector3(0, 0, 1);
    V3B[2] = new Vector3(1, 0, 1);
    V3B[3] = new Vector3(1, 0, 0);

    TrPtsB[0] = 0;
    TrPtsB[1] = 1;
    TrPtsB[2] = 2;
    TrPtsB[0] = 2;
    TrPtsB[1] = 1;
    TrPtsB[2] = 3;

    meshb.vertices = V3B;
    meshb.triangles = TrPtsB;

    combine[0].mesh = mesha;
    combine[1].mesh = meshb;

    RetMesh.RecalculateBounds();
    RetMesh.RecalculateNormals();
    RetMesh.RecalculateTangents();

    RetMesh.CombineMeshes(combine);

    return RetMesh;
}

Я использую Unity 2017.

1 Ответ

0 голосов
/ 02 июля 2019

Прежде всего, неверно установлен буфер индекса треугольника. Если вы рисуете плоскость, то передняя сторона должна быть по часовой стрелке, это ваше

        V3A[0] = new Vector3(0, 0, 0);
        V3A[1] = new Vector3(0, 1, 0);
        V3A[2] = new Vector3(1, 1, 0);
        V3A[3] = new Vector3(1, 0, 0);

        TrPtsA[0] = 0;
        TrPtsA[1] = 1;
        TrPtsA[2] = 2;
        TrPtsA[0] = 2;
        TrPtsA[1] = 1;
        TrPtsA[2] = 3;

        mesha.vertices = V3A;
        mesha.triangles = TrPtsA;


        V3B[0] = new Vector3(0, 0, 0);
        V3B[1] = new Vector3(0, 0, 1);
        V3B[2] = new Vector3(1, 0, 1);
        V3B[3] = new Vector3(1, 0, 0);


        TrPtsB[0] = 0;
        TrPtsB[1] = 1;
        TrPtsB[2] = 2;
        TrPtsB[0] = 2;
        TrPtsB[1] = 1;
        TrPtsB[2] = 3;

Код должен быть таким, я изменил направление индексного буфера по часовой стрелке. если вы не сделаете это по часовой стрелке, он не появится на экране при удалении задней поверхности.

        V3A[0] = new Vector3(0, 0, 0);
        V3A[1] = new Vector3(0, 1, 0);
        V3A[2] = new Vector3(1, 1, 0);
        V3A[3] = new Vector3(1, 0, 0);

        TrPtsA[0] = 0;
        TrPtsA[1] = 1;
        TrPtsA[2] = 2;
        TrPtsA[0] = 2;
        TrPtsA[1] = 3;
        TrPtsA[2] = 1;

        mesha.vertices = V3A;
        mesha.triangles = TrPtsA;


        V3B[0] = new Vector3(0, 0, 0);
        V3B[1] = new Vector3(0, 0, 1);
        V3B[2] = new Vector3(1, 0, 1);
        V3B[3] = new Vector3(1, 0, 0);


        TrPtsB[0] = 0;
        TrPtsB[1] = 1;
        TrPtsB[2] = 2;
        TrPtsB[0] = 2;
        TrPtsB[1] = 3;
        TrPtsB[2] = 1;


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...