Разрешения текстур OpenGL автоматически уменьшаются? - PullRequest
2 голосов
/ 28 октября 2011

Что я имею в виду, если я хочу использовать растровое изображение для текстуры, я должен убедиться, что это растровое изображение настолько мало, насколько это возможно, чтобы сохранить память от текстур?(Конечно, я выбрасываю само растровое изображение после того, как текстура была создана).Или я могу просто использовать 512x512 ударов в минуту, и OpenGL автоматически создает текстуру на основе меньшего размера (поскольку это будет просто мяч в прорывной игре)?

Поскольку я мог себе представить, что потребуется немало времени, чтобы выяснить идеальный размер растрового изображения, если оно будет использоваться в нескольких разрешениях, от телефонов ldpi до планшетов (Android ...).Или я должен создать изображения разных размеров для одного и того же изображения, например, 512,256,128.,,

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Текстура OpenGL настолько велика, насколько вы ее создаете (например, используя glTexImage2D). Если вы хотите создать текстуру из растрового изображения, вы должны либо сделать текстуру такой же большой, как растровое изображение, либо каким-либо образом уменьшить сами данные растрового изображения. Как OpenGL должен автоматически определять оптимальный размер текстуры для вашего приложения, не говоря уже о том, чтобы уменьшить его для вас, что, конечно же, ваша работа.

Если вы действительно говорите об автоматической генерации mipmap, то это возможно, и вы должны посмотреть на ответ Сальваторе. Но если вы действительно говорите о том, что OpenGL выбирает «лучший» размер для вашей текстуры и инициализирует ее данные, используя изображение совершенно другого размера, нет, это определенно невозможно.

1 голос
/ 28 октября 2011

Вы говорите о создании мип-карт?http://www.swiftless.com/tutorials/opengl/mipmap_generation.html

На этой странице представлен общий пример того, как генерировать mip-карты в компьютерном приложении с использованием библиотеки glu.Я действительно не знаю много об андроиде (все еще), но, конечно, opengl не будет использовать mip-карты, если вы не скажете opengl сделать это.Наличие mipmaps увеличивает производительность и качество рендеринга.В оперативных мип-картах размером 512х512 пикселей изображения не занимают много памяти.Вы загрузите одно и то же изображение с размерами 512x512, 256x256, 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 1x1, используя максимальное количество уровней, но вы можете сохранить только первые 3 или 4 уровня.Так как количество оперативной памяти уменьшается экспоненциально, чем больше уровней вы добавляете, тем выше уровни потребляют буквально только несколько байтов памяти.

См. Также этот вопрос http://www.gamedev.net/topic/611182-android-and-mipmaps/

...