three.js - повторение РАЗДЕЛА текстурного атласа

Так что в three.js нам кажется, что нам нужно использовать свойства texture.offset и texture.repeat для извлечения фрагментов текстуры (атласа) для применения к различным сеткам. Это прекрасно работает, но, насколько я могу судить, невозможно выбрать повторение этого раздела текстуры? потому что свойство repeat уже используется для определения "края" подсекции текстуры. Мой код для использования texture.offset и texture.repeat для извлечения части текстуры:`

var texture = atlasTexture.clone();
texture.repeat.set(section.w / atlasTexture.width, section.h / atlasTexture.height);
texture.offset.x = ((section.x) / atlasTexture.width);
texture.offset.y = 1 - (section.h / atlasTexture.height) - (section.y / atlasTexture.height);

1 ответ

Решение

Короткий ответ... вы не можете без использования пользовательских шейдеров... и создание пользовательских шейдеров является более болезненным, чем это может быть IMO. Вы должны сделать информацию о регионе видимой для шейдера, кодируя индекс плитки в координате UV или что-то в этом роде... либо используя плитки фиксированного размера. Вы также должны беспокоиться о заполнении островков, если хотите, чтобы фильтрация текстуры не выполнялась. дать вам краевые артефакты. Я делал это раньше для движка рендеринга мозаики hexmap, который я написал некоторое время назад... и было очень трудно начать работать, но когда я это сделал, он работал действительно хорошо... У меня были карты 4k/4k плиток, работающие со скоростью 60fps с 3 слоя.

Если вы хотите обсудить это дальше вживую, я тусуюсь в этом трюке с dev.js. Мой ник - thrax.

https://join.slack.com/t/threejs/shared_invite/enQtMzYxMzczODM2OTgxLWE5OTU4OTYxZTZlODk1ZGNjODIyMDZlODM4ZmUyMzNiOWIxMmFjNTYwOTc4MjU0ZmNiODk5MzZiMGJhMTkzZWI

Другие вопросы по тегам