Нечетное зубчатое отображение текстур с mip-отображением в OpenGL с использованием "glGenerateMipmap" - PullRequest
0 голосов
/ 08 октября 2018

Я впервые экспериментирую с mip-картами в OpenGL.Я следовал этому учебнику , который основан на этом коде .В шейдерном фрагменте я сделал следующую модификацию:

vec2 uv = UV;
uv.y = 1-UV.y;
color = texture( myTextureSampler, uv, 1 ).rgb;

..., которая переворачивает значения оси Y (часть учебного упражнения, чтобы получить правильную текстуру). Он также устанавливает смещение LOD в последней строке, чтобы я мог просматривать более грубые детали в текстуре.

Я также изменил cpp файл учебного пособия:

строка 29, отключение сглаживания супер-выборки:

// glfwWindowHint(GLFW_SAMPLES, 4);

строка 87, создайте mip-карты:

GLuint Texture = loadDDS("uvtemplate.DDS"); 
glBindTexture(GL_TEXTURE_2D, Texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glGenerateMipmap(GL_TEXTURE_2D);

из строки 183,реализовано простое движение камеры (чтобы получить хороший обзор ее внешнего вида):

...
GLfloat rot = 0.0;
do{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glUseProgram(programID);

    rot += 0.003;
    View       = glm::lookAt(
                            glm::vec3(glm::cos(rot)*4.8, glm::cos(rot/3)*1.3+ 1.3 ,glm::sin(rot)*2.9), 
                            glm::vec3(0,0,0), 
                            glm::vec3(0,1,0)); 
    MVP        = Projection * View * Model; 
    glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
    ...

Я ожидал увидеть размытую версию текстуры ввода , вместо этого она выглядит ужасно: enter image description here

Зубчатые края на нижней стороне "1" не имеют никакого смысла для меня вообще.Они появляются на некоторых фигурах в текстуре, но не на других.

Формат входной текстуры - .DDS, может ли это быть источником проблемы?Может ли это быть ошибка в моем драйвере?Я на Ubuntu Linux 16.04, с новейшими драйверами, как в PPA: s.В сети искал, ничего не нашел по этой теме.

edit : Я также экспериментировал с некоторыми настройками openGL, такими как:

glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);

GLfloat anisoVal;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &anisoVal);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisoVal);

, но ничего не сделал.

1 Ответ

0 голосов
/ 10 октября 2018

Источником проблемы был старый драйвер.Компьютер, на котором я работал, имел специальную настройку, где нестандартные PPA заменили поддерживаемые Ubuntu (Canonical).Я не мог получить доступ к некоторым из тех, кто находится за пределами специальной внутренней сети (у клиента).Не читал сообщения об ошибках в обновлении sudo apt-get.

Урок из моего вопроса: виды ошибок, которые могут возникнуть, и то, как они могут укусить вас, непредсказуемы, если вы не обновите драйверы графического адаптера ..... даже если вы думаете, что обновили их .... двойная и тройная проверка.Спасибо @derhass и @ Rabbid76 за оставленные полезные замечания.

...