Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: kamil от Январь 29, 2015, 18:00



Название: Проблема с анизотропией
Отправлено: kamil от Январь 29, 2015, 18:00
Хочу включить анизотропную фильтрацию для текстур:
Инициализирую текстуры так:

Код:
glGenTextures(2, textures);
int maxAniso;
glGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAniso );
qDebug() << "aniso support" << QString::fromLocal8Bit( (const char *) glGetString(GL_EXTENSIONS) ).contains("GL_EXT_texture_filter_anisotropic");
qDebug() << "aniso max" << maxAniso;

QImage textureTop;
textureTop.load(":/texture/imgs/top.png");
textureTop = QGLWidget::convertToGLFormat(textureTop);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, (GLsizei)textureTop.width(), (GLsizei)textureTop.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, textureTop.bits());
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2 );

...

и так применяю:
Код:
glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, textures[0]);
gBegin(GL_QUADS);
glNormal3f( 0,-1, 0);
        glTexCoord2f(0.0f, 0.0f); glVertex3d( BOX_WIDTH/2,-BOX_THICK/2, BOX_LENGTH/2);
        glTexCoord2f(0.0f, 1.0f); glVertex3d(-BOX_WIDTH/2,-BOX_THICK/2, BOX_LENGTH/2);
        glTexCoord2f(1.0f, 1.0f); glVertex3d(-BOX_WIDTH/2,-BOX_THICK/2,-BOX_LENGTH/2);
        glTexCoord2f(1.0f, 0.0f); glVertex3d( BOX_WIDTH/2,-BOX_THICK/2,-BOX_LENGTH/2);
glEnd();
glDisable( GL_TEXTURE_2D );

но почему-то оно не везде работает (но где-то работает нормально).

Если попробовать так:
Код:
QImage textureTop;
textureTop.load(":/texture/imgs/top.png");
textureTop = QGLWidget::convertToGLFormat(textureTop);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, (GLsizei)textureTop.width(), (GLsizei)textureTop.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, textureTop.bits());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

То работает везде, правда не сглаживается никак. На всех компьютерах поддерживается GL_EXT_texture_filter_anisotropic, максимальный уровень 16.

Что я делаю не так?