LINUX.ORG.RU

Автоматизация

 , , ,


0

2

Короче есть ограничение на кол-во текстур используемых в веб-апликухе. Сейчас там берутся координаты текселей от 0 до 1. Как обойти ограничение? Я подумал что можно склеить несколько текстур в один атлас и тогда ограничение можно обойти, но есть ньюанс - придется менять координаты текселей(было от 0 до 1, а станет например от 0 до 0,15, от 0,15 до 0.4(по горизонтали, плюс еще вычислять по вертикали) и т.д), поскольку у меня есть отдельные текстуры которые будут склеиваться в атлас, то можно сделать алгоритм который возьмет одну текстуру с текселями от 0 до 1 и возьмет текстурный атлас и например методом перебора координат текселей в атласе матчить на канве до совпадения пикселей атласной текстуры с отдельной текстурой без атласа. Вроде как есть веб библиотеки на джаваскрипте например tensorflow(никогда не пользовался) и ей распознавать изображения с двух canvas между собой или я усложняю?


Ответ на: комментарий от goingUp

«Запоминаешь» - классный план, как швейцарские часы. А если потом придется добавить еще одну текстуру к атласу, все остальные придется пересчитывать и что это за программа такая в которой можно координаты(их еще надо будет нормировать к единичному отрезку) увидеть?

doomer
() автор топика
Ответ на: комментарий от static_lab

он вроде звездное небо рисовал. вообще по идее это надо делать сферу или многогранник и обтягивать его текстурами. плюс какие-то обьекты типа солнца , луны, и все такое делать как просто плоские полигоны с текстурами.

но это на первый такой взгляд

alysnix ★★★
()
Ответ на: комментарий от static_lab

потому что когда я добавил еще одну текстуру и вместо gl.activeTexture(gl.TEXTURE8); написал gl.activeTexture(gl.TEXTURE9); текстура перестала рисоваться на мобильном браузере, а потом и на компе, а теперь она на компе рисуется, страницу перезагрузил - перестала рисоваться

doomer
() автор топика

Передавай через uniform ID текстуры, и количество текстур в атласе, например твоя текстура это атлас 4x4, значит 1/4 * ID это начало координат нужной текстуры, нужные координаты можно закольцевать в нужном диапазоне в нейдере, и всё, делов на 10 минут. Если не понял пойди на shadertoy и там просто найди любую демку с текстурными атласами, увидишь как координаты расчитываются.

Единственное что, готовься к пердолингу со стыками текстур, при использовании mipmap у дальних объектов появится сетка, это решается разными способами, отступами внутри самих текстур, скалированием координат в зависимости от расстояния и так далее, это уже отдельно разбирайся

  • передаёшь текстуру атласа
  • передаёшь число текстур в атласе
  • передаёшь ID нужной текстуры
  • на основе этих данных вычисляешь координаты
  • всё
anonymous
()
Ответ на: комментарий от doomer

потому что когда я добавил еще одну текстуру и вместо gl.activeTexture(gl.TEXTURE8); написал gl.activeTexture(gl.TEXTURE9); текстура перестала рисоваться на мобильном браузере, а потом и на компе, а теперь она на компе рисуется, страницу перезагрузил - перестала рисоваться

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

static_lab ★★★★★
()
Ответ на: комментарий от doomer

А подумать? Та тулза что склеивает тебе текстуры в атлас должна писать рядом файл где написано по каким координатам какая текстура лежит.

anonymous
()