Russian Qt Forum
Ноябрь 23, 2024, 03:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с анизотропией  (Прочитано 1785 раз)
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.

Что я делаю не так?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 20.