Unity не отображает некоторые части моей сетки, чтобы сделать другие части видимыми

Я сделал пользовательский mesh в коде (но, похоже, это происходит с любыми GameObject, которые я делаю), и когда я просматриваю его в игре или в редакторе, некоторые лица исчезают, чтобы я мог видеть это яснее. Я мог понять, чем это будет полезно, но это довольно неприятно не только для игрового процесса, но и просто для работы над проектом. Вероятно, это просто поле, которое мне нужно снять, но я не знаю, что это такое. Я включил несколько скриншотов (первый в игре, а второй в редакторе. Меш должен иметь форму полной пирамиды). Моя сетка для куба имеет 12 треугольников, 8 вершин и без uvs, тогда как сетка по умолчанию имеет 24 вершины, 12 треугольников, uv и uv2, просто для справки.

Снимок экрана в игре  В редакторе

Вот мои настройки камеры:  Настройки камеры

[EDIT] Нет! Я был неправ! Он отлично работает с cube по умолчанию и другими объектами по умолчанию.

Вот он:  Обычный куб

Но с моим кубом:  Нет

Вот код, который я использовал:

        if (GameObject.Find ("Hopefully a Cube") == null) {

            GameObject cube = new GameObject ("Hopefully a Cube");
            Mesh mesh = new Mesh ();

            Vector3[] verticies = new Vector3[8];
            verticies [0] = new Vector3 (0, 0, 0);
            verticies [1] = new Vector3 (100, 0, 0);
            verticies [2] = new Vector3 (0, 100, 0);
            verticies [3] = new Vector3 (100, 100, 0);

            verticies [4] = new Vector3 (0, 0, 100);
            verticies [5] = new Vector3 (100, 0, 100);
            verticies [6] = new Vector3 (0, 100, 100);
            verticies [7] = new Vector3 (100, 100, 100);

            mesh.vertices = verticies;

            int[] tris = new int[36];
            tris = new[] { 0, 2, 1, 2, 3, 1, 4, 2, 0, 6, 2, 4, 4, 6, 5, 6, 7, 5, 1, 3, 5, 3, 7, 5, 0, 4, 1, 4, 5, 1, 2, 6, 3, 6, 7, 3 };
            mesh.triangles = tris;

            mesh.RecalculateNormals ();

            MeshFilter meshFilter = cube.AddComponent<MeshFilter> ();
            meshFilter.mesh = mesh;

            MeshRenderer meshRenderer = cube.AddComponent<MeshRenderer> ();
            Texture2D texture = new Texture2D (1, 1);
            texture.SetPixels (new[] { Color.blue });
            meshRenderer.sharedMaterial = new Material (meshShader);
            meshRenderer.sharedMaterial.mainTexture = texture;

            cube.SetActive (true);

        }

        if (GameObject.Find ("Hopefully a Pyramid") == null) {

            GameObject pyramid = new GameObject ("Hopefully a Pyramid");
            Mesh mesh = new Mesh ();

            Vector3[] verticies = new Vector3[5];
            verticies [0] = new Vector3 (0, 0, 0);
            verticies [1] = new Vector3 (100, 0, 0);
            verticies [2] = new Vector3 (0, 0, 100);
            verticies [3] = new Vector3 (100, 0, 100);
            verticies [4] = new Vector3 (50, 100, 50);

            mesh.vertices = verticies;

            int[] tris = new int[18];
            tris = new[] { 0, 2, 1, 2, 3, 1, 0, 4, 1, 2, 4, 0, 3, 4, 2, 3, 4, 1 };

            mesh.triangles = tris;

            mesh.RecalculateNormals ();

            MeshFilter meshFilter = pyramid.AddComponent<MeshFilter> ();
            meshFilter.mesh = mesh;

            MeshRenderer meshRenderer = pyramid.AddComponent<MeshRenderer> ();
            Texture2D texture = new Texture2D (1, 1);
            texture.SetPixels (new[] { Color.blue });
            meshRenderer.sharedMaterial = new Material (meshShader);
            meshRenderer.sharedMaterial.mainTexture = texture;

            pyramid.SetActive (true);

        }

person dsiegler19    schedule 01.05.2016    source источник
comment
Я на 99% уверен, что это связано с порядком намотки. эффект, который вы видите, скорее всего, не для того, чтобы вы могли видеть его более ясно, потому что индексы (или, как единство называет это треугольниками, почему-либо, расположены в неправильном порядке). пожалуйста, опубликуйте код, который вы используете для создания куба.   -  person yes    schedule 01.05.2016
comment
Я добавил код, который использовал.   -  person dsiegler19    schedule 01.05.2016
comment
@ dsiegler19 добавил ответ и короткое объяснение. отметьте это как правильное.   -  person yes    schedule 01.05.2016
comment
привет @ dsiegler19 - такое бывает. это была пустая трата времени, так как вы думали, что это также не работает для правильных моделей. но это может случиться с ошибками! Вот несколько полезных материалов по ориентации сетки answers.unity3d.com/answers/267076/view.html и answers.unity3d.com/answers/263328/view.html и связанный QA.   -  person Fattie    schedule 02.05.2016
comment
Остерегайтесь этой проблемы .. answers.unity3d.com/questions/417483/   -  person Fattie    schedule 02.05.2016
comment
и обратите внимание на это! stackoverflow.com/a/36845398/294884   -  person Fattie    schedule 02.05.2016


Ответы (1)


Индексы (целые числа в массиве треугольников) вашей сетки расположены в неправильном порядке. Они должны располагаться по часовой стрелке от того направления, в котором вы смотрите на лицо. Простой совет: если они кажутся неправильными, просто переверните 2 индекса рассматриваемого треугольника.

Это твой куб.

tris = new[] {
    0, 2, 1, 2, 3, 1, 
    4, 2, 0, 6, 2, 4, 
    4, 5, 6, 6, 5, 7, 
    1, 3, 5, 3, 7, 5,
    0, 1, 4, 4, 1, 5,
    2, 6, 3, 6, 7, 3
};

Если вам интересно, почему у него такая странная заливка, создайте куб из 24 вершин и увидите разницу. Это потому, что нормали на грани зависят от нормалей вершин, составляющих его. (то же самое касается цветов вершин и УФ-лучей). Поэтому, если вам нужны острые края, разные цвета вершин на смежных гранях или УФ-шов, вам понадобятся отдельные вершины для граней / ребер (то есть 2 вершины в одном месте), поскольку вы можете установить эти функции только на вершинах.

person yes    schedule 01.05.2016
comment
Ох, ладно. Так как некоторые треугольники не были упорядочены по часовой стрелке, они не отображались должным образом. Спасибо! - person dsiegler19; 01.05.2016