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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Бэкграунд-картинка для QGLWidget  (Прочитано 4987 раз)
Myav
Гость
« : Апрель 23, 2007, 13:33 »

Добрый день!

Имеется QGLWidget со скучным одноцветным бекграундом:

Код:
void Canvas::initializeGL()
{
  qglClearColor(Qt::darkGray);
}

void Canvas::paintGL()
{
  glClear(GL_COLOR_BUFFER_BIT);
  // ...
}


А хочется, чтобы бэкграунд был вымощен моей картинкой. Бело-серыми шашечками, как в фотошопе. Не подскажите, как такое сделать?  :roll:
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Апрель 23, 2007, 14:17 »

нужно использовать OpenGL методы для этого. К томуже рисуемый фон должен быть самым нижним слоем. Создание текстуры:
Код:

        glGenTextures(1, tex);
        glBindTexture(GL_TEXTURE_2D, *tex);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dim, dim, 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits());


отрисовка:
Код:

    float half_w, half_h;

    half_w = w / 2.0;
    half_h = h / 2.0;

    glBindTexture(GL_TEXTURE_2D, *tex);

    // draw
    glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0);                          glVertex2f(-half_w, half_h);
        glTexCoord2f(w/(GLfloat)dim, 0.0);               glVertex2f(half_w, half_h);
        glTexCoord2f(w/(GLfloat)dim, h/(GLfloat)dim);    glVertex2f(half_w, -half_h);
        glTexCoord2f(0.0, h/(GLfloat)dim);               glVertex2f(-half_w, -half_h);
    glEnd();
}


где dim - ширина и высота текстуры, должно быть кратно степени двойки, есстественно Улыбающийся

w, h - геометрия окна

изображение достаточно загрузить с помощью QImage (+ заюзать QGLWidget::convertToGLFormat()) и использовать QImage::bits() как указатель на двоичные данные в glTexImage2D()
Записан
Myav
Гость
« Ответ #2 : Апрель 23, 2007, 23:11 »

Alex_X, спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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