Название: Проблема с анизотропией
Отправлено: 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. Что я делаю не так?
|