Пожалуйста, помогите мне понять технологию mipmap
.
Когда я использую mipmaps
в моей программе, изображения имеют деформации при уменьшении.При создании текстуры я использую trilinear
фильтрацию:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
Я загружаю текстуру размером 128x128
и устанавливаю количество уровней mipmap:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 10);
Я использую VBO
для рендеринга.В фрагментном шейдере я использую функцию texture2D
для рендеринга текстуры.Когда я устанавливаю размер квадрата на 128x128
, изображения не имеют дефектов.Но когда я устанавливаю размер на 85px
, я вижу деформации:
Тогда на 64px
изображение не имеет дефектов и с размером 50px
оно деформируется:
Когда я использую функцию textureLod, можно добиться хорошего качества текстуры при размере квадрата от 64px
до 128px
, если я использую lod = 0
.
Если я уменьшу квадрат до размера в 50px
текстура имеет дефекты с lod = 0
:
и с lod = 1
или2
:
Я не понимаю, на каком уровне детализации мне нужно правильно рисовать текстуру на квадрате меньше 64px
, когда я использую размер текстуры 128px
.И я не понимаю, почему функция texture2D
не рисует текстуру в квадрате 85px
правильно.
Я пытаюсь использовать значения с плавающей запятой для lod и пытаюсь использовать параметр смещения в функции texture2D
, но у меня естьне самый оптимальный результат.
Пожалуйста, помогите мне, кто сталкивался с подобной проблемой.
Тестовая программа (7z-архив) Тестовая программа с исходным кодом (7z-архив)