#c #opengl #texture-atlas
#c #opengl #текстура-атлас
Вопрос:
Я хотел бы сгенерировать атлас текстур из некоторых текстур, которые уже загружены в память.
Текстуры, которые я хотел бы включить в атлас, генерируются процедурно во время выполнения, поэтому я не могу просто создать карту в формате png, которая уже содержит их.
Возможно ли это сделать с помощью OpenGL?
Комментарии:
1. Да, это возможно.
2. Итак, я подумал, что одна вещь, которую я могу сделать, это каким-то образом объединить данные, которые я передаю в glTexImage2D, вместо фактического создания текстур, чтобы затем объединить их в атлас. Вы знаете, как я могу это сделать?
3. Вы можете передать несколько текстур в fragment shader и выполнить слияние там.
4. @МатвейВислоух Ah, yes, of course. Автор берет текстурный атлас. Скорее всего, мы берем квадратные текстуры.
5. да, они квадратные, спасибо @Rabbid76 glTexSubImage2D это то, что я искал
Ответ №1:
Создайте текстуру, достаточно большую glTexImage2D
, и используйте glTexSubImage2D
ее, чтобы поместить в нее 100 крошечных квадратных текстур. glTexSubImage2D
позволяет задавать смещения x и y в целевой текстуре и размер (ширину и высоту) плитки.
Комментарии:
1. Похоже, это работает, но все плитки на карте плиток выглядят как последняя. Похоже, что последний вызов glTexSubImage2D переопределяет все предыдущие подизображения с пикселями из последнего вызова.
glTexSubImage2D(GL_TEXTURE_2D,0,tileWidth * i,0,tileWidth,tileHeight,GL_RGBA,GL_UNSIGNED_BYTE,textures[i].pixels);
2. @ellipticaldoor Нет, это не так. Очень вероятно, что это вызвано ошибкой в вашей программе.