Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ребята, помогите с графикой!
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
boris
Здравствуйте! Подскажите пожалуйста пути решения следующей задачи.
Мне нужно отображать 2-D сцену. Данными для визуализации являются:
1-ый слой: координатная сетка;
2-ой слой: двумерная матрица 4096 X 1200 , значения которой будут специальным образом интерпретироваться и выводиться как пиксели(точки) с соответствующими координатами;
3-ий слой: служебная информация, которая тоже специальным образом интерпретируется и отображается в виде пиктограмм-значков с соотв. координатами (до 500-800 объектов);
Слой №2 часто обновляется по сигналу из другого потока, который ведет обработку данных. Вся сцена должна уметь масштабироваться по скроллу.

Программа пишется с помощью Qt под Linux. Критерий: максимум быстродействия.
boris
Цитата(boris @ 4.12.2012, 11:51) *

Сам я сделал пробник через QGLWidget, но без 3-го слоя - процессор сильно грузится.
Смотрю в сторону QGLPixelbuffers - как эта штука работает, по докам не въехал? Можно это совместить с QGraphicsItem ?
Snake174
Процедуру paintGL покажи.
boris
Цитата(Snake174 @ 5.12.2012, 9:12) *
Процедуру paintGL покажи.

#include "openglwidget.h"
#include "math.h"
#include "mainwindow.h"
#include "processingthread.h"
#include <QtOpenGL>
#define PI 3.14159
QPainter painter;
QPoint cPoint;
QPen pen;
openGLwidget::openGLwidget(QWidget *parent) :
    QGLWidget(QGLFormat(QGL::SampleBuffers|QGL::SingleBuffer), parent)
{
    setFixedSize(800,800);
    x0=400; y0=400;R=390;cPoint.rx()=x0;cPoint.ry()=y0;
}
//-------------------------------------------------------------------------------------------------
void openGLwidget::drawIKO()
{
    painter.begin(this);
    // рисование данных наподобие:
    // if (w->ok2[i][j]==1){
      
        //  x=(j*R/1200)*sin(i*0.17578125*PI/180);
        //  y=(j*R/1200)*cos(i*0.17578125*PI/180);
       //   painter.drawPoint(cPoint.rx()+x,cPoint.ry()-y);
         }
    painter.end();
}
//-------------------------------------------------------------------------------------------------
void openGLwidget::paintGL()
{
    drawIKO();
}
//-------------------------------------------------------------------------------------------------
Snake174
Если исплдьзуешь QGLWidget, лучше и выводи GL-ными функциями. И замени QGL::SingleBuffer на QGL::DoubleBuffer. Первый слой лучше выводить с помощью glCallList()
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.