У меня проблемы с реализацией mipmapping в OpenGL. Я использую OpenFrameworks и изменил класс ofTexture для поддержки создания и рендеринга mipmaps.
Следующий код является исходным кодом создания текстуры из класса (слегка измененным для ясности):
glEnable(texData.textureTarget);
glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
glTexSubImage2D(texData.textureTarget, 0, 0, 0, w, h, texData.glType, texData.pixelType, data);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glDisable(texData.textureTarget);
Это моя версия с поддержкой mipmap:
glEnable(texData.textureTarget);
glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
gluBuild2DMipmaps(texData.textureTarget, texData.glTypeInternal, w, h, texData.glType, texData.pixelType, data);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glDisable(texData.textureTarget);
Код не генерирует ошибок (gluBuild2DMipmaps возвращает '0') и текстуры отображаются без проблем. Однако я не вижу никакой разницы.
Сцена, которую я рендеринг, состоит из "плоских, квадратных плиток" при z = 0. Это в основном 2D-сцена. Я увеличиваю и уменьшаю масштаб с помощью «glScale ()» перед рисованием плиток. Когда я уменьшаю масштаб, пиксельные текстуры начинают «танцевать», что указывает (насколько я могу судить) на поиск нефильтрованной текстуры. См .: http://www.youtube.com/watch?v=b_As2Np3m8A в 25 с.
Мой вопрос: поскольку я не перемещаю положение камеры, а использую только масштабирование всей сцены, означает ли это, что OpenGL не может выбрать соответствующий уровень mipmap и использует полный размер текстуры (уровень 0)?
Пол