Найти в Дзене

№169. GODOT 4. Класс Geometry2D - 3.

В рамках этой статьи будем разбираться с текстурированием полигона. Для наглядности я нарисовал вот такую текстуру (размеры 300х100): Добавляем в проект полигон. Включаем привязку к сетке, и рисуем полигон начиная с координаты 50х50, и размерами 400х300 Дропаем текстуру на полигон. Ну и тут сразу видно что текстура ложится на полигон по вьюпорту. Т.е с координаты 0.0 .
Если зайти в меню UV , то мы увидим такую же картину. Поправить расположение текстуры можно в редакторе, просто двигая точки. Этот вариант хорош, если вы не собираетесь манипулировать данными полигона в будущем (об этом чуть ниже) Можно наболтать значение Оffset. Сдвигаем на -50.-50 для того чтобы вернуть текстуру на правильную координату. Этот вариант предпочтителен , если вы собираетесь манипулировать данными полигона (об этом чуть ниже) Ну и само собой можно через код.
UV представляет из себя упакованный массив точек. По умолчанию он дублируется из позиций точек полигона. В нашем случае это массив 50.50, 450.50, 450.3

В рамках этой статьи будем разбираться с текстурированием полигона.

Для наглядности я нарисовал вот такую текстуру (размеры 300х100):

Добавляем в проект полигон. Включаем привязку к сетке, и рисуем полигон начиная с координаты 50х50, и размерами 400х300

-2

Дропаем текстуру на полигон.

-3

Ну и тут сразу видно что текстура ложится на полигон по вьюпорту. Т.е с координаты 0.0 .
Если зайти в меню UV , то мы увидим такую же картину.

-4

Поправить расположение текстуры можно в редакторе, просто двигая точки. Этот вариант хорош, если вы не собираетесь манипулировать данными полигона в будущем (об этом чуть ниже)

-5

Можно наболтать значение Оffset. Сдвигаем на -50.-50 для того чтобы вернуть текстуру на правильную координату. Этот вариант предпочтителен , если вы собираетесь манипулировать данными полигона (об этом чуть ниже)

-6

Ну и само собой можно через код.
UV представляет из себя упакованный массив точек. По умолчанию он дублируется из позиций точек полигона.

В нашем случае это массив 50.50, 450.50, 450.350, 50.350 - отсюда собственно этот сдвиг тектуры.
Если мы хотим расположить текстуру так, чтобы она покрывала весь полигон полностью, и при этом лежала корректно - нам надо подать в UV новые координаты, которые будут располагать текстуру корректно по точкам полигона.

Понимаю, возможно это звучит сейчас запутанно. Но давайте просто изменим в массиве первую координату с 50.50 на 0.0.

-7

Уже видно что текстура начала рисоваться правильно.
Повторим коррекцию для остальных точек.

-8

Можно заметить, что итоговый массив представляет из себя по сути размеры спрайта - 300х200, и теперь наша текстура лежит корректно на полигоне.

Теперь перейдем к связке с Geometry.

Добавляем в сцену полигон, который будет вырезать часть полигона ноды poly.

-9

В коде оставим коррекцию текстуры через код, и допишем вырезание по клику.
(незабудьте выключить видимость полигона который будет вырезать)

-10

Запускаем, кликаем, и наблюдаем вот такой странный результат.

-11

Происходит обнуление UV координат.
Обьснить это наверное можно тем, что новый массив точек изменяется (добавляются новые данные) и переносится на UV, тем самым скидывая все значения к исходным.

Это можно поправить через код, опять же простой математикой - просто прогнав все точки массива через цикл в котором прописывать сдвиг.

Ну и как я указывал выше, если использовать Offset, то проблем с текстурой после вырезаний уже не будет.

-12

На этом пожалуй всё.
Надеюсь информация была полезной.
Подписывайтесь на канал или
вступайте в группу в ВК.
Удачи в изучении годо !