Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Myav от Апрель 23, 2007, 13:33



Название: Бэкграунд-картинка для QGLWidget
Отправлено: Myav от Апрель 23, 2007, 13:33
Добрый день!

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

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

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


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


Название: Бэкграунд-картинка для QGLWidget
Отправлено: Alex Custov от Апрель 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()


Название: Бэкграунд-картинка для QGLWidget
Отправлено: Myav от Апрель 23, 2007, 23:11
Alex_X, спасибо!