Я впервые экспериментирую с 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]);
...
Я ожидал увидеть размытую версию текстуры ввода , вместо этого она выглядит ужасно:
Зубчатые края на нижней стороне "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);
, но ничего не сделал.