На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Проблема с текстурами в OpenGL
    Всем привет!

    Программирую графику на openGL. Столкнулся с проблемой при работе с текстурами. А именно, при определении типа фильтрации текстуры.
    GL_NEAREST - полет нормальный.
    GL_LINEAR - полет нормальный.
    GL_LINEAR_MIPMAP_LINEAR - косяк.

    Код для создания третей текстуры. Для первых двух соответственно GL_NEAREST и GL_LINEAR.
    ExpandedWrap disabled
      AUX_RGBImageRec *imgTexture = auxDIBImageLoad("data/img.bmp");
      glGenTextures(3, &Texture[2]);
      glBindTexture(GL_TEXTURE_2D, Texture[2]);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
      glTexImage2D(GL_TEXTURE_2D, 0, 3, imgTexture->sizeX, imgTexture->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, imgTexture->data);


    Скрин прилагается :-)
    user posted image

    Собственно вопрос: какова причина такого поведения? Буду благодарен за любые информативные ответы.
      При использовании mipmaps надо их генерировать. Есть несколько способов это делать:
      • Самый простой и традиционный: вместо glTexImage2D используй gluBuild2DMipmaps.
      • Аппаратная генерация для GL версий с 1.4 по 2.1: вызвать glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE) перед glTexImage2D. (не рекомендуется т.к. в поздних GL версия эта функциональность удалена)
      • Аппаратная генерация для GL версии 3.0 и выше: вызвать glGenerateMipmap(GL_TEXTURE_2D) после glTexImage2D. (Если версия GL < 3.0 но есть расширение GL_EXT_framebuffer_object, то использовать ф-цию glGenerateMipmapEXT)
      • В некоторых случаях может пригодится: генерировать mip-уровни вручную и устанавливать каждый уровень вызовом glTexImage2D(GL_TEXTURE_2D, level, ...)
      Может с младшими номерами версий для аппаратной генерации я чуть напутал, но в общем примерно так, точнее - см. спецификации на OpenGL.org
      Сообщение отредактировано: mitrich -
        Спасибо за детальный ответ, mitrich.
        Ты мне очень помог.

        Буду копать OpenGL дальше, еще со многим предстоит разобраться)
          Примечание: самый надежный вариант - последний.
          Собственно, думаю, в драйверах на функцию генерации уровней не обращают внимания, т.к. любая вменяемая программа все равно генерит уровни самостоятельно.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0483 ]   [ 14 queries used ]   [ Generated: 17.05.24, 02:30 GMT ]