Как я могу создать атлас текстур в OpenGL с другими существующими текстурами?

Я хотел бы создать атлас текстур из некоторых текстур, которые уже загружены в память.

Текстуры, которые я хочу включить в атлас, генерируются процедурно во время выполнения, поэтому я не могу просто создать тайловую карту png, которая уже содержит их.

Возможно ли это сделать с OpenGL?

Да, это возможно.

Hihikomori 20.12.2020 23:46

Итак, я подумал, что одна вещь, которую я могу сделать, это каким-то образом объединить данные, которые я передаю в glTexImage2D, вместо фактического создания текстур, чтобы затем объединить их в атлас. Вы знаете, как я могу это сделать?

ellipticaldoor 20.12.2020 23:52

Фрагментному шейдеру можно передать несколько текстур, а там сделать слияние.

Hihikomori 20.12.2020 23:56

У меня есть более 100 крошечных текстур, идея состоит в том, чтобы иметь большую текстуру, к которой можно легко получить доступ одним вызовом отрисовки.

ellipticaldoor 20.12.2020 23:57

@ellipticaldoor Создайте достаточно большую текстуру с помощью glTexImage2D и используйте glTexSubImage2D, чтобы поместить в нее «100 крошечных текстур».

Rabbid76 20.12.2020 23:59

GlTexSubImage2D действителен, только если «100 крошечных текстур» являются прямоугольниками.

Hihikomori 21.12.2020 00:03

@МатвейВислоух А, да, конечно. Автор рассказывает о текстурном атласе. Скорее всего речь идет о квадратных текстурах.

Rabbid76 21.12.2020 00:07

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

Hihikomori 21.12.2020 00:09

Да, они квадратные, спасибо @Rabbid76 glTexSubImage2D это то, что я искал

ellipticaldoor 21.12.2020 00:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
9
902
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте достаточно большую текстуру с помощью 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 21.12.2020 01:42

@ellipticaldoor Нет, это не так. Скорее всего, это вызвано ошибкой в ​​вашей программе.

Rabbid76 21.12.2020 08:26

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