Как я могу использовать рендеринг mipmap без дефектов текстуры? - PullRequest
0 голосов
/ 08 октября 2018

Пожалуйста, помогите мне понять технологию 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, я вижу деформации:

image

Тогда на 64px изображение не имеет дефектов и с размером 50px оно деформируется:

image

Когда я использую функцию textureLod, можно добиться хорошего качества текстуры при размере квадрата от 64px до 128px, если я использую lod = 0.

image

Если я уменьшу квадрат до размера в 50px текстура имеет дефекты с lod = 0:

image

и с lod = 1 или2:

image

Я не понимаю, на каком уровне детализации мне нужно правильно рисовать текстуру на квадрате меньше 64px, когда я использую размер текстуры 128px.И я не понимаю, почему функция texture2D не рисует текстуру в квадрате 85px правильно.

Я пытаюсь использовать значения с плавающей запятой для lod и пытаюсь использовать параметр смещения в функции texture2D, но у меня естьне самый оптимальный результат.

Пожалуйста, помогите мне, кто сталкивался с подобной проблемой.

Тестовая программа (7z-архив) Тестовая программа с исходным кодом (7z-архив)

...