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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отрисовка содержимого буфера OGL  (Прочитано 5353 раз)
cipher
Гость
« : Май 21, 2007, 18:44 »

Вот здесь проблему вывода GDI+OpenGL в один QGLWidget решили
http://prog.org.ru/forum/htopic_3682_%CF%D4%D2%C9%D3%CF%D7%CB%C1+opengl.html
только у меня не получается при вызове вот таком
Код:

void AOpenGL::paintEvent(QPaintEvent *event)
{
  QPainter painter;
  painter.setRenderHint(QPainter::Antialiasing);

  painter.begin(this);
    glClearColor(0, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    gluLookAt
   (
         0.5, 0.5, 1,
         0.5, 0.5, 0,
         0, 1, 0
   );

    genFrameTex();
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, tex);
    glBegin(GL_QUADS);
      glTexCoord2f(0, 1);
      glVertex3f(0, 0, 0);

      glTexCoord2f(1, 1);
      glVertex3f(1, 0, 0);

      glTexCoord2f(1, 0);
      glVertex3f(1, 1, 0);

      glTexCoord2f(0, 0);
      glVertex3f(0, 1, 0);
    glEnd();
    glDisable(GL_TEXTURE_2D);
  painter.end();
}

Выводится просто чёрный экран. Может авторы предыдущей темы пояснят немного где грабли.

добавлено спустя 1 час 45 минут:

 Малость переформулирую вопрос, вот такой вот код не обновляет картинку постоянно. Неужели нельзу как-то обойтись без QTimer? Как обычно, обновляют сцены в OGL+QT? В WinAPI там цикл устраивался while(true), а здесь как зациклить обновление картинки?
Код:

void AOpenGL::paintEvent(QPaintEvent *event)
{
  QPainter painter;

  painter.begin(this);
    resizeGL(width(), height());
    renderFrame();
  painter.end();
}
Записан
J. Bond
Гость
« Ответ #1 : Май 22, 2007, 10:04 »

а зачем вообще использовать painter в примере выше?
и попробуй все запихнуть в PaintGL() а не в paintEvent();

а про обновление
int main()
{
while (true)
{
paintGL();
}
}
ну и в ней все что нужно.
Записан
cipher
Гость
« Ответ #2 : Май 22, 2007, 14:21 »

Мне ведь надо GDI и OGL одновременно рисовать в одном окне один поверх другого. Счас вроде получается - сделал QTimer на него повесил вот так вот

Код:

  timer = new QTimer;
  connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));
  timer -> start();


Но отрисовка происходит слишком медленно. Вся сцена рисуется в paintGL. Как ускорить вывод сцены?
Записан
J. Bond
Гость
« Ответ #3 : Май 22, 2007, 15:23 »

А какой период перерисовки?

Ускорение== как можно меньше QPainter
Вообще с OpenGL тяжело выводить только текст ->
все рисуем на OpenGL
Паинтером рисуем на пиксмапе которую потом рендерим на опенгл.
Записан
cipher
Гость
« Ответ #4 : Май 22, 2007, 15:51 »

Вот период перерисовки как ты видишь опущен, в доках троля я не нашёл через какое время будет дёргаться функция если не указан промежуток у метода start().

А потом то что нарисовали в QPainter блендим с кадром из OGL? Как-то мудрено получается

Бог с ним пока с qpainter, мне надо пока просто ускорить вывод результата работы OGL. Можно как-то подтолкнуть процесс именно с точки зрения QT?
Записан
J. Bond
Гость
« Ответ #5 : Май 22, 2007, 16:46 »

насчет таймера - timer->start(интервал в миллисекундах)
при твоем варианте интервал равен нулю.
Ускорить можно только увеличив интервал.
Ну и соответственно использовать VertexBuffers для ускорения.


с блендингом получается мудрено, но гораздо быстрее.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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