Я хотел бы создать атлас текстур из некоторых текстур, которые уже загружены в память.
Текстуры, которые я хочу включить в атлас, генерируются процедурно во время выполнения, поэтому я не могу просто создать тайловую карту png, которая уже содержит их.
Возможно ли это сделать с OpenGL?
Итак, я подумал, что одна вещь, которую я могу сделать, это каким-то образом объединить данные, которые я передаю в glTexImage2D, вместо фактического создания текстур, чтобы затем объединить их в атлас. Вы знаете, как я могу это сделать?
Фрагментному шейдеру можно передать несколько текстур, а там сделать слияние.
У меня есть более 100 крошечных текстур, идея состоит в том, чтобы иметь большую текстуру, к которой можно легко получить доступ одним вызовом отрисовки.
@ellipticaldoor Создайте достаточно большую текстуру с помощью glTexImage2D и используйте glTexSubImage2D, чтобы поместить в нее «100 крошечных текстур».
GlTexSubImage2D действителен, только если «100 крошечных текстур» являются прямоугольниками.
@МатвейВислоух А, да, конечно. Автор рассказывает о текстурном атласе. Скорее всего речь идет о квадратных текстурах.
Я имею в виду, если текстурные миры имеют сложную геометрию и альфа-канал, и если эти миры должны быть повернуты...
Да, они квадратные, спасибо @Rabbid76 glTexSubImage2D это то, что я искал
Создайте достаточно большую текстуру с помощью glTexImage2D и используйте glTexSubImage2D, чтобы поместить в нее 100 крошечных квадратных текстур. glTexSubImage2D позволяет указать смещения x и y в целевой текстуре и размер (ширину и высоту) плитки.
Вроде работает, но все тайлы на тайловой карте выглядят как последний. Кажется, что последний вызов glTexSubImage2D переопределяет все предыдущие фрагменты изображения с пикселями из последнего вызова. glTexSubImage2D(GL_TEXTURE_2D,0,tileWidth * i,0,tileWidth,tileHeight,GL_RGBA,GL_UNSIGNED_BYTE,textures[i].pixels);
@ellipticaldoor Нет, это не так. Скорее всего, это вызвано ошибкой в вашей программе.
Да, это возможно.