Marching_Cube [Custom Edition]

Проекты в стадии разработки.

Marching_Cube [Custom Edition]

Сообщение Zamarrus 01 апр 2017, 12:39

Всем Юнитовцам, Юникумам и Юнцам огромный привет :ymhug: . Я долго шаманил над этими шагающими кубами для того что бы их затекстурить и столкнулся с множеством проблем. Такими как : Треугольники (т.е. там по три вершины на кусочек решения), а для тайла нужно 4 и непосредственно много лишних вершин. Решил убить двух зайцев сразу и создал свою таблицу с блекджеком уменьшенным количеством вершин, по 4 на каждый кусочек модели, а так как в Шагающих кубах очень много разновидностей плоскостей, это значительно уменьшило количество вершин и позволило тайлить модель. Если быть точным, теперь вершин в 2 раза больше треугольников, а не в 3 и не в 3.5. Используются все те жи решения для Ходячих. Я буду дорабатывать его для того что бы он иногда использовал уже имеющиеся вершины у уже построенных Ходячих. Используется 23 уже просчитанные позиции для решений.

Вот таблица
Синтаксис:
Используется csharp
public static int[][] m_meshTable = new int[256][]
    {
        new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 9, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0,  8, 3, 14, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 10, 9, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 10, 8, 3, 20, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 9, 11, 2, 20, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 11, 10, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 10, 1, 20, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 11, 9, 0, 20, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 7, 3, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 7, 1, 9, 21, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 10, 1, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 0, 4, 7, 14, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 10, 9, 0, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 10, 9, 7, 15, 2, 7, 3, 16, 7, 9, 4, -1, -1, -1, -1 },
        new int[] { 16, 7, 8, 4, 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 11, 2, 4, 7, 21, 0, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 16, 7, 8, 4, 15, 3, 11, 2, -1, -1, -1, -1 },
        new int[] { 4, 7, 11, 9, 9, 11, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 11, 10, 1, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 4, 11, 10, 13, 0, 4, 1, 16, 7, 11, 4, -1, -1, -1, -1 },
        new int[] { 16, 7, 8, 4, 9, 0, 3, 11, 20, 11, 10, 9, -1, -1, -1, -1 },
        new int[] { 4, 7, 11, 9, 20, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 4, 9, 5, 12, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 5, 4, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 5, 4, 8, 20, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 10, 1, 17, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 3, 0, 8, 14, 2, 10, 1, 17, 4, 9, 5, -1, -1, -1, -1, -1 },
        new int[] { 5, 4, 2, 10, 20, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 2, 10, 5, 8, 3, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 4, 9, 5, 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 11, 2, 17, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 1, 5, 4, 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 1, 5, 2, 2, 5, 8, 11, 17, 4, 8, 5, -1, -1, -1, -1 },
        new int[] { 10, 1, 3, 11, 17, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 4, 9, 5, 0, 8, 10, 1, 20, 8, 11, 10, -1, -1, -1, -1 },
        new int[] { 17, 4, 0, 5, 5, 0, 11, 10, 12, 3, 11, 0, -1, -1, -1, -1, -1 },
        new int[] { 5, 4, 8, 10, 20, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 5, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 5, 3, 0, 20, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 1, 7, 8, 20, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 5, 7, 8, 14, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] {14, 2, 10, 1, 5, 3, 0, 9, 20, 5, 7, 3, -1, -1, -1, -1 },
        new int[] { 10, 5, 8, 2, 21, 2, 8, 0, 22, 7, 8, 5, -1, -1, -1, -1 },
        new int[] { 2, 10, 5, 3, 20, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 7, 8, 9, 5, 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 22, 7, 9, 5, 21, 0, 9, 2, 7, 11, 2, 9, -1, -1, -1},
        new int[] { 15, 3, 11, 2, 1, 7, 8, 0, 22, 7, 1, 5, -1, -1, -1, -1 },
        new int[] { 11, 2, 1, 7, 22, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 5, 7, 8, 10, 1, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 5, 7, 0, 9, 0, 7, 11, 10, 13, 0, 10, 1, -1, -1 },
        new int[] { 12, 3, 11, 0, 0, 11, 10, 5, 0, 5, 7, 8, -1 },
        new int[] { 11, 10, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 9, 8, 3, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 6, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 6, 5, 1, 12, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 0, 6, 5, 21, 2, 6, 0, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 5, 9, 8, 2, 18, 5, 2, 6, 15, 2, 8, 3, -1, -1, -1 },
        new int[] { 15, 3, 11, 2, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 11, 2, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] {13, 1, 9, 0, 15, 3, 11, 2, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] {18, 5, 10, 6, 2, 1, 9, 11, 20, 9, 8, 11, -1, -1, -1, -1 },
        new int[] { 3, 11, 6, 5, 21, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 11, 5, 13, 0, 5, 1, 18, 5, 11, 6, -1, -1, -1, -1 },
        new int[] { 3, 11, 6, 0, 0, 6, 5, 9, -1, -1, -1, -1 },
        new int[] { 6, 5, 9, 11, 20, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 18, 5, 10, 6, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 7, 3, 0, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 18, 5, 10, 6, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 18, 5, 10, 6, 1, 9, 4, 7, 21, 1, 7, 3, -1, -1, -1, -1 },
        new int[] { 6, 5, 1, 2, 16, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 2, 6, 5, 3, 0, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 16, 7, 8, 4, 9, 0, 6, 5, 20, 0, 2, 6, -1, -1, -1, -1 },
        new int[] { 7, 3, 9, 4, 9, 3, 2, 6, 18, 5, 9, 6, -1 },
        new int[] { 15, 3, 11, 2, 16, 7, 8, 4, 18, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 18, 5, 10, 6, 7, 11, 2, 4, 20, 2, 0, 4, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 16, 7, 8, 4, 15, 3, 11, 2, 18, 5, 10, 6, -1, -1, -1, -1 },
        new int[] { 9, 11, 2, 1, 9, 4, 7, 11, 18, 5, 10, 6, -1 },
        new int[] { 16, 7, 8, 4, 3, 11, 6, 5,21, 3, 5, 1, -1, -1, -1, -1 },
        new int[] { 5, 1, 11, 6, 11, 1, 0, 4, 16, 7, 11, 4, -1 },
        new int[] { 0, 6, 5, 9, 0, 3, 11, 6, 16, 7, 8, 4, -1 },
        new int[] { 6, 5, 9, 11, 4, 7, 11, 9, -1, -1, -1, -1 },
        new int[] { 6, 4, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 9, 10, 6, 12, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 10, 6, 0, 1, 22, 4, 0, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 3, 21, 1, 8, 6, 22, 4, 8, 1, 10, 6, -1, -1, -1, -1 },
        new int[] { 1, 2, 4, 9, 20, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, 1, 2, 4, 9, 20, 2, 6, 4, -1, -1, -1, -1 },
        new int[] { 0, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 3, 2, 4, 20, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 10, 6, 4, 9, 15, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 11, 2, 4, 9, 10, 6, -1, -1, -1, -1 },
        new int[] { 15, 3, 11, 2, 20, 6, 4, 0, 1, 10, 6, 0, -1, -1, -1, -1 },
        new int[] { 6, 4, 1, 10, 14, 1, 11, 2, 8, 11, 1, 4, -1 },
        new int[] { 9, 6, 22, 4, 9, 1, 21, 3, 9, 3, 11, 6, -1, -1, -1 },
        new int[] {  8, 1, 13, 0, 11, 6, 1, 8, 1, 6, 4, 9, -1 },
        new int[] { 3, 11, 6, 0, 0, 6, 22, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 6, 4, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 7, 8, 10, 6, 20, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 7, 3, 0, 9, 10, 7, 19, 7, 10, 6, -1, -1, -1, -1 },
        new int[] { 10, 6, 7, 1, 1, 7, 8, 0, -1, -1, -1, -1 },
        new int[] { 10, 6, 7, 1, 21, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 6, 1, 1, 6, 8, 9, 8, 6, 19, 7, -1, -1, -1, -1 },
        new int[] { 2, 6, 9, 1, 9, 6, 7, 3, 12, 0, 9, 3, -1 },
        new int[] { 7, 8, 0, 6, 6, 0, 21, 2, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 6, 7, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 15, 3, 11, 2, 10, 6, 8, 9, 8, 6, 19, 7, -1, -1, -1, -1 },
        new int[] { 7, 11, 2, 0, 19, 7, 10, 6, 9, 10, 7, 0,- 1 },
        new int[] { 1, 7, 8, 0, 7, 1, 10, 6, 15, 3, 11, 2, -1 },
        new int[] { 11, 2, 1, 7, 10, 6, 7, 1, -1, -1, -1, -1 },
        new int[] { 8, 6, 19, 7, 9, 1, 6, 8, 6, 1, 3, 11, -1 },
        new int[] { 13, 0, 9, 1, 19, 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 7, 8, 0, 6, 0, 3, 11, 6, -1, -1, -1, -1 },
        new int[] { 19, 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 3, 1, 9, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 10, 1, 14, 2, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 10, 1, 12, 0, 8, 3, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 10, 9, 0, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 19, 6, 11, 7, 2, 10, 8, 3, 20, 10, 9, 8, -1, -1, -1, -1 },
        new int[] { 7, 6, 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 7, 6, 0, 8, 20, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 3, 7, 6, 13, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 1, 6, 2, 1, 9, 8, 6, 8, 7, 19, 6, -1, -1, -1, -1 },
        new int[] { 10, 1, 7, 6, 20, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 7, 6, 10, 1, 1, 0, 8, 7, -1, -1, -1, -1 },
        new int[] { 12, 3, 7, 0, 0, 7, 10, 9, 19, 6, 10, 7, -1, -1, -1, -1 },
        new int[] { 7, 6, 10, 8, 20, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 11, 8, 4, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 0, 6, 11, 20, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 4, 6, 11, 9, 0, 13, 1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 4, 22, 6, 9, 3, 21, 1, 3, 9, 6, 11, -1, -1, -1, -1 },
        new int[] { 8, 4, 6, 11, 14, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 10, 1, 3, 0, 6, 11, 20, 0, 4, 6, -1, -1, -1, -1 },
        new int[] { 4, 6, 11, 8, 0, 2, 10, 9, -1, -1, -1, -1 },
        new int[] {  10, 3, 15, 2, 9, 4, 3, 10, 3, 4, 6, 11, -1 },
        new int[] { 8, 4, 2, 3, 22, 6, 2, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 3, 8, 4, 2, 2, 4, 22, 6, -1, -1, -1, -1 },
        new int[] { 1, 9, 4, 2, 2, 4, 22, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 1, 21, 3, 8, 4, 22, 6, 8, 6, 10, 1, -1, -1, -1, -1 },
        new int[] { 10, 1, 0, 6, 22, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 6, 3, 8, 12, 3, 9, 0, 10, 9, 3, 6, -1 },
        new int[] { 10, 9, 4, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 4, 9, 5, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, 17, 4, 9, 5, 11, 7, 19, 6, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 5, 4, 0, 1, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 11, 7, 19, 6, 8, 3, 5, 4, 20, 3, 1, 5, -1, -1, -1, -1 },
        new int[] { 9, 5, 17, 4, 10, 1, 14, 2, 19, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 19, 6, 11, 7, 14, 2, 10, 1, 12, 0, 8, 3, 17, 4, 9, 5, -1, -1, -1, -1 },
        new int[] { 19, 6, 11, 7, 5, 4, 2, 10, 20, 4, 0, 2, -1, -1, -1, -1 },
        new int[] { 3, 5, 4, 8, 3, 2, 10, 5, 11, 7, 19, 6, -1 },
        new int[] { 7, 6, 2, 3, 17, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 4, 9, 5, 0, 8, 6, 2, 19, 6, 8, 7, -1, -1, -1, -1 },
        new int[] { 3, 7, 6, 2, 1, 5, 4, 0, -1, -1, -1, -1 },
        new int[] { 6, 2, 8, 7, 8, 1, 5, 4, 14, 1, 8, 2, -1 },
        new int[] { 9, 5, 17, 4, 1, 7, 6, 10, 20, 1, 3, 7, -1, -1, -1, -1 },
        new int[] { 1, 7, 6, 10, 1, 0, 8, 7, 9, 5, 17, 4, -1 },
        new int[] { 4, 0, 10, 5, 6, 10, 3, 7, 12, 3, 10, 0, -1 },
        new int[] { 7, 6, 10, 8, 5, 4, 8, 10, -1, -1, -1, -1 },
        new int[] { 6, 11, 9, 5, 20, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 0, 6, 11, 0, 9, 5, 6, -1, -1, -1, -1 },
        new int[] { 0, 5, 11, 8, 13, 1, 5, 0, 18, 6, 11, 5, -1, -1, -1, -1 },
        new int[] { 6, 11, 3, 5, 5, 3, 21, 1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 14, 2, 10, 1, 9, 5, 11, 8, 11, 5, 18, 6, -1, -1, -1, -1 },
        new int[] { 0, 6, 11, 3, 0, 9, 5, 6, 14, 2, 10, 1, -1 },
        new int[] { 11, 5, 18, 6, 8, 0, 5, 11, 5, 0, 2, 10, -1 },
        new int[] { 6, 11, 3, 5, 2, 10, 5, 3, -1, -1, -1, -1 },
        new int[] { 5, 2, 8, 9, 18, 6, 2, 5, 15, 3, 8, 2, -1, -1, -1, -1 },
        new int[] { 9, 5, 6, 0, 21, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 5, 8, 0, 6, 2, 8, 5, 15, 3, 8, 2, -1 },
        new int[] { 1, 5, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 3, 6, 10, 8, 9, 6, 3, 18, 6, 9, 5, -1 },
        new int[] { 10, 1, 0, 6, 5, 6, 0, 9, -1, -1, -1, -1 },
        new int[] { 12, 3, 8, 0, 18, 6, 10, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 10, 5, 18, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 7, 5, 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 11, 7, 5, 10, 8, 3, 12, 0, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 5, 10, 11, 7, 13, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 10, 11, 7, 5, 9, 8, 3, 1, -1, -1, -1, -1 },
        new int[] { 11, 7, 1, 2, 20, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, 1, 2, 11, 7, 20, 7, 5, 1, -1, -1, -1, -1 },
        new int[] { 9, 7, 22, 5, 9, 0, 21, 2, 2, 11, 7, 9, -1, -1, -1, -1 },
        new int[] { 7, 5, 2, 11, 9, 8, 2, 5, 15, 2, 8, 3, -1 },
        new int[] { 2, 3, 5, 10, 20, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 2, 21, 0, 8, 7, 22, 5, 10, 2, 8, 5, -1, -1, -1, -1 },
        new int[] { 9, 0, 13, 1, 20, 3, 7, 5, 3, 5, 10, 2, -1, -1, -1, -1 },
        new int[] { 8, 7, 2, 9, 9, 2, 14, 1, 5, 10, 2, 7, -1 },
        new int[] { 3, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 8, 7, 1, 1, 7, 22, 5, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 0, 3, 5, 20, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 8, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 5, 10, 8, 4, 20, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 17, 5, 0, 4, 5, 10, 11, 0, 11, 3, 12, 0, -1, -1, -1, -1 },
        new int[] { 13, 1, 9, 0, 20, 10, 11, 8, 8, 4, 5, 10, -1, -1, -1, -1 },
        new int[] { 10, 4, 17, 5, 11, 3, 4, 10, 1, 9, 4, 3, -1 },
        new int[] { 14, 2, 5, 1, 2, 11, 8, 5, 17, 5, 8, 4, -1, -1, -1, -1 },
        new int[] { 0, 4, 11, 3, 5, 1, 11, 4, 14, 2, 11, 1, -1 },
        new int[] { 0, 2, 5, 9, 11, 8, 5, 2, 17, 5, 8, 4, -1 },
        new int[] { 9, 4, 17, 5, 15, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 3, 5, 10, 3, 8, 4, 5, -1, -1, -1, -1 },
        new int[] { 5, 10, 2, 4, 20, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 3, 5, 10, 5, 3, 8, 4, 13, 1, 9, 0, -1 },
        new int[] { 5, 10, 2, 4, 1, 9, 4, 2, -1, -1, -1, -1 },
        new int[] { 8, 4, 5, 3, 20, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 4, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 8, 4, 5, 3, 9, 0, 3, 5, -1, -1, -1, -1 },
        new int[] { 9, 4, 17, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 9, 11, 7, 20, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 0, 8, 3, 4, 9, 11, 7, 20, 9, 10, 11, -1, -1, -1, -1 },
        new int[] { 1, 10, 11, 4, 13, 1, 4, 0, 16, 4, 11, 7, -1, -1, -1, -1 },
        new int[] { 3, 1, 4, 8, 10, 11, 4, 1, 16, 4, 11, 7, -1 },
        new int[] { 4, 9, 11, 7, 9, 1, 2, 11, -1, -1, -1, -1 },
        new int[] { 9, 11, 7, 4, 9, 1, 2, 11, 12, 0, 8, 3, -1 },
        new int[] { 11, 7, 4, 2, 21, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 11, 7, 4, 2, 8, 3, 2, 4, -1, -1, -1, -1 },
        new int[] { 2, 7, 9, 10, 15, 3, 7, 2, 16, 4, 9, 7, -1, -1, -1, -1 },
        new int[] { 9, 7, 16, 4, 10, 2, 7, 9, 7, 2, 0, 8, -1 },
        new int[] { 3, 7, 10, 2, 4, 0, 10, 7, 13, 1, 10, 0, -1 },
        new int[] { 14, 1, 10, 2, 8, 7, 16, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 9, 1, 7, 20, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 4, 9, 1, 7, 0, 8, 7, 1, -1, -1, -1, -1 },
        new int[] { 4, 0, 3, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 16, 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 0, 9, 11, 20, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 0, 1, 10, 8, 20, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 1, 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 2, 11, 9, 20, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 3, 0, 9, 11, 1, 2, 11, 9, -1, -1, -1, -1 },
        new int[] { 0, 2, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 15, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 3, 8, 10, 20, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 9, 10, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 2, 3, 8, 10, 0, 1, 10, 8, -1, -1, -1, -1 },
        new int[] { 14, 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 1, 3, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 13, 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { 12, 3, 8, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
        new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }
    };


Весь Код С типичным использованием представлен ниже, просто копируйте его в свой Скрипт
Синтаксис:
Используется csharp
    MeshFilter m_Filter;
    MeshRenderer m_Renderer;
    MeshCollider m_Collider;
    List<Vector3> Vert = new List<Vector3>();
    List<int> tris = new List<int>();
    List<Vector2> uvs = new List<Vector2>();
    public int brick = 1;

    PerlinNoise noise;

    public float[] dec;
    // Use this for initialization
    void Awake()
    {
        m_Filter = GetComponent<MeshFilter>();
        m_Renderer = GetComponent<MeshRenderer>();
        m_Collider = GetComponent<MeshCollider>();
    }

    // Update is called once per frame
    void Start()
    {
        Mesh mesh = new Mesh();
        noise = new PerlinNoise(1);
        dec = new float[8];

        for (int x = 0; x < 16; x++)
        {
            for (int y = 0; y < 16; y++)
            {
                for (int z = 0; z < 16; z++)
                {
                    int cubeIndex = 0;
                    dec[0] = Noser(x, y, z + 1);
                    dec[1] = Noser(x + 1, y, z + 1);
                    dec[2] = Noser(x + 1, y, z);
                    dec[3] = Noser(x, y, z);
                    dec[4] = Noser(x, y + 1, z + 1);
                    dec[5] = Noser(x + 1, y + 1, z + 1);
                    dec[6] = Noser(x + 1, y + 1, z);
                    dec[7] = Noser(x, y + 1, z);

                    Vector3[] positions = new Vector3[23];
                    positions[0] = new Vector3(x + 0.5f, y, z + 1);
                    positions[1] = new Vector3(x + 1, y, z + 0.5f);
                    positions[2] = new Vector3(x + 0.5f, y, z);
                    positions[3] = new Vector3(x, y, z + 0.5f);
                    positions[4] = new Vector3(x + 0.5f, y + 1, z + 1);
                    positions[5] = new Vector3(x + 1, y + 1, z + 0.5f);
                    positions[6] = new Vector3(x + 0.5f, y + 1, z);
                    positions[7] = new Vector3(x, y + 1, z + 0.5f);
                    positions[8] = new Vector3(x, y + 0.5f, z + 1f);
                    positions[9] = new Vector3(x + 1, y + 0.5f, z + 1);
                    positions[10] = new Vector3(x + 1, y + 0.5f, z);
                    positions[11] = new Vector3(x, y + 0.5f, z);
                    positions[12] = new Vector3(x + 0.25f, y, z + 0.75f);
                    positions[13] = new Vector3(x + 0.75f, y, z + 0.75f);
                    positions[14] = new Vector3(x + 0.75f, y, z + 0.25f);
                    positions[15] = new Vector3(x + 0.25f, y, z + 0.25f);
                    positions[16] = new Vector3(x + 0.25f, y + 1, z + 0.75f);
                    positions[17] = new Vector3(x + 0.75f, y + 1, z + 0.75f);
                    positions[18] = new Vector3(x + 0.75f, y + 1, z + 0.25f);
                    positions[19] = new Vector3(x + 0.25f, y + 1, z + 0.25f);
                    positions[20] = new Vector3(x + 0.5f, y + 0.5f, z + 0.5f);
                    positions[21] = new Vector3(x + 0.5f, y, z + 0.5f);
                    positions[22] = new Vector3(x + 0.5f, y + 1, z + 0.5f);

                    if (dec[0] < 1)
                        cubeIndex |= 1;
                    if (dec[1] < 1)
                        cubeIndex |= 2;
                    if (dec[2] < 1)
                        cubeIndex |= 4;
                    if (dec[3] < 1)
                        cubeIndex |= 8;
                    if (dec[4] < 1)
                        cubeIndex |= 16;
                    if (dec[5] < 1)
                        cubeIndex |= 32;
                    if (dec[6] < 1)
                        cubeIndex |= 64;
                    if (dec[7] < 1)
                        cubeIndex |= 128;

                    for (int i = 0; m_meshTable[cubeIndex][i] != -1; i += 4)

                    {
                        int ind = Vert.Count;
                       
                        Vert.Add(positions[m_meshTable[cubeIndex][i]]);
                        Vert.Add(positions[m_meshTable[cubeIndex][i + 1]]);
                        Vert.Add(positions[m_meshTable[cubeIndex][i + 2]]);
                        Vert.Add(positions[m_meshTable[cubeIndex][i + 3]]);
                       
                        tris.Add(ind + 2);
                        tris.Add(ind + 1);
                        tris.Add(ind + 0);
                        tris.Add(ind + 0);
                        tris.Add(ind + 3);
                        tris.Add(ind + 2);
                       
                        Vector2 uvWidth = new Vector2(0.25f, 0.25f);
                        Vector2 uvCorner = new Vector2(0.00f, 0.75f);
                       
                        uvCorner.x += (float)(brick) / 4;
                       
                        uvs.Add(uvCorner);
                        uvs.Add(new Vector2(uvCorner.x, uvCorner.y + uvWidth.y));
                        uvs.Add(new Vector2(uvCorner.x + uvWidth.x, uvCorner.y + uvWidth.y));
                        uvs.Add(new Vector2(uvCorner.x + uvWidth.x, uvCorner.y));

                    }

                }
            }
        }
        mesh.vertices = Vert.ToArray();
        mesh.triangles = tris.ToArray();
        mesh.uv = uvs.ToArray();

        mesh.RecalculateNormals();
        mesh.RecalculateBounds();

        m_Filter.mesh = mesh;
    }

    float Noser(float x, float y, float z)
    {
        float noiseX = x + transform.position.x;
        float noiseY = y + transform.position.y;
        float noiseZ = z + transform.position.z;

        float noiseValue = y + transform.position.y - (noise.FractalNoise3D(noiseX, noiseY, noiseZ, 1, World.world.CaveScale, World.world.MountScale));


        return noiseValue;
    }

Изображение
Забыл сказать brick -это позиция тайла на текстуре. Позже сделаю видео с подробным показом и рассказом об этом всем. Для знатаков : Реализуется как стандартный Marching Cubes. Спасибо за внимание :p
Zamarrus
UNец
 
Сообщения: 28
Зарегистрирован: 01 фев 2017, 16:07

Вернуться в Кузня

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

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