mesh.RecalculateNormals()

Программирование на Юнити.

mesh.RecalculateNormals()

Сообщение mahovik321 05 апр 2018, 00:52

Во общем, есть простой код для процедурной генерации квадрата.
Синтаксис:
Используется csharp
Mesh _mesh;
    MeshFilter _mf;

    private void Start() {
        _mf = GetComponent<MeshFilter>();
        _mesh = new Mesh();
        _mf.mesh = _mesh;

        Vector3[] vertices = new Vector3[4]
        {
            new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(1, 1, 0), new Vector3(0, 1, 0)
        };

        int[] triangles = new int[6];
        triangles[0] = 0;
        triangles[1] = 2;
        triangles[2] = 1;

        triangles[3] = 0;
        triangles[4] = 3;
        triangles[5] = 2;

        _mesh.Clear();
        _mesh.vertices = vertices;
        _mesh.triangles = triangles;
        _mesh.RecalculateNormals();
    }
 


Вопрос. Зачем нужен _mesh.RecalculateNormals(), если и так всё работает и какие могут быть последствия отказа от него?
Я понял что он пересчитывает нормали, но и без него все работает.
Вроде он нужен для правильного отображения падения света?
В официальных доках такого нет, а в разных туторах есть.
mahovik321
UNец
 
Сообщения: 41
Зарегистрирован: 20 дек 2014, 17:50

Re: mesh.RecalculateNormals()

Сообщение 1max1 05 апр 2018, 06:41

mahovik321 писал(а):В официальных доках такого нет

В каком смысле нет? https://docs.unity3d.com/ScriptReferenc ... rmals.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: mesh.RecalculateNormals()

Сообщение djon801 05 апр 2018, 17:23

mahovik321 писал(а):Во общем, есть простой код для процедурной генерации квадрата.
Синтаксис:
Используется csharp
Mesh _mesh;
    MeshFilter _mf;

    private void Start() {
        _mf = GetComponent<MeshFilter>();
        _mesh = new Mesh();
        _mf.mesh = _mesh;

        Vector3[] vertices = new Vector3[4]
        {
            new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(1, 1, 0), new Vector3(0, 1, 0)
        };

        int[] triangles = new int[6];
        triangles[0] = 0;
        triangles[1] = 2;
        triangles[2] = 1;

        triangles[3] = 0;
        triangles[4] = 3;
        triangles[5] = 2;

        _mesh.Clear();
        _mesh.vertices = vertices;
        _mesh.triangles = triangles;
        _mesh.RecalculateNormals();
    }
 


Вопрос. Зачем нужен _mesh.RecalculateNormals(), если и так всё работает и какие могут быть последствия отказа от него?
Я понял что он пересчитывает нормали, но и без него все работает.
Вроде он нужен для правильного отображения падения света?
В официальных доках такого нет, а в разных туторах есть.

Потому что это квадрат! 6 плоскостей без излома,сгенирируй что то посложнее .там тебе понавылазят косячки
А вообще она для моделей импортированных со всяких 3d редакторов больше нужна
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: mesh.RecalculateNormals()

Сообщение seaman 05 апр 2018, 23:45

Вообще recalculateNormals() для импортированных моделей нафиг не нужна. А в остальном все верно.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7