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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Рисование множества точек с OpenGL  (Прочитано 17980 раз)
soaup
Гость
« Ответ #15 : Июль 17, 2014, 08:28 »

Подождите, а если у меня QByteArray bd, в нем записана последовательсть байтов которые мне нужно отрисовать. И я, до этого, к каждому байту через цикл обращался так - bd.at(i), то теперь мне через цикл надо перегнать все байты в массив GLFloat или QVector, и потом вызвать функцию, гду я укажу первый элемент?
« Последнее редактирование: Июль 17, 2014, 08:31 от soaup » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #16 : Июль 17, 2014, 08:36 »

Самое простое использовать, например, QVector<GLfloat> и на фход функции давать адрес первого элемента.
Записан
soaup
Гость
« Ответ #17 : Июль 17, 2014, 09:04 »

Ну кажется что-то заработало, буду дальше разбираться. Всем спасибо! Не знаю, как тут на форуме плюсы ставить...
« Последнее редактирование: Июль 17, 2014, 09:07 от soaup » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #18 : Июль 17, 2014, 10:32 »

Ну кажется что-то заработало, буду дальше разбираться. Всем спасибо! Не знаю, как тут на форуме плюсы ставить...

А вот никак и не поставить Улыбающийся
Записан

soaup
Гость
« Ответ #19 : Июль 17, 2014, 11:35 »

Как бы рисуется, но что странно - рисуется только в области 1/10 всего виджета (весь рисунок сжимается раз в 10), причем какие бы настройки я бы не задавал в resizeGL, в glOrtho. Ставлю самые разные значения max x:
Код:
void glsignal::resizeGL(int nWidth, int nHeight) {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLfloat ratio=(GLfloat)nHeight/(GLfloat)nWidth;
     //if (nWidth>=nHeight)
     //  glOrtho(-1.0/ratio, 1.0/ratio, -1.0, 1.0, -10.0, 1.0);
     // else
     // glOrtho(-1.0, 1.0, -1.0*ratio, 1.0*ratio, -10.0, 1.0);
    glOrtho(0, 1000, 255, 0, -1, 1);
}
Вот так отрисовываю:
Код:
void glsignal::drawLine() {
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_FLOAT, 0, VertexArray);
    glDrawArrays(GL_LINE_STRIP, 0, 20000);
    glDisableClientState(GL_VERTEX_ARRAY);

До этого обьявлял GLfloat VertexArray[54000][2]. Отправляю данные отрисовки виджету функцией getVertexArray
Код:
void glsignal::getVertexArray(QByteArray &bd)
{
    for (int i=0; i<bd.size(); i++)
    {
        VertexArray[i][0] = i; //x
        VertexArray[i][1] = bd.at(i); //y
    }
}
Т.е. перегоняю QByteArray bd в координаты y.
« Последнее редактирование: Июль 17, 2014, 11:54 от soaup » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Июль 17, 2014, 12:04 »

По поводу тормознутости 2D в OpenGL я сужу по моим наблюдениям. Вот несколько:
В наблюдательности (и здравом смысле) Вам не откажешь, только иногда надо и самому лично разбираться - а не только по слухам Улыбающийся В аттаче пример рисования 10к разноцветных линий, результаты

-  QWidget (рисование без OpenGL) = 4 fps
-  QGLWidget рисование c QPainter = 8 fps
-  QGLWidget рисование c OpenGL = 60 fps

ВНИМАНИЕ: пример требует Qt сборки с opengl desktop. Невдобняк капитальный они сделали с тем ES  Плачущий
Записан
soaup
Гость
« Ответ #21 : Июль 17, 2014, 12:27 »

Да, и я разобрался с прошлой проблемой, забыл добавить строчку glViewport(0, 0, (GLint)nWidth, (GLint)nHeight);
И последний вопрос на сегодня - хотелось бы знать, если мне нужно отрисовать линию из точек, у которых будет один и тот же y, меняться будет x (с 0 на 1 до некоего числа), и у каждой точки будет свой цвет, это какая функция больше подходит для этого? А еще - как организовывать массив цветов?
« Последнее редактирование: Июль 17, 2014, 13:24 от soaup » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Июль 17, 2014, 14:33 »

И последний вопрос на сегодня - хотелось бы знать, если мне нужно отрисовать линию из точек, у которых будет один и тот же y, меняться будет x (с 0 на 1 до некоего числа), и у каждой точки будет свой цвет, это какая функция больше подходит для этого? А еще - как организовывать массив цветов?
"Вот я спрошу, ответят - и я быстренько сделаю. Зачем пробовать, думать, читать доки..". Так или нет?  Улыбающийся
Не злоупотребляйте помощью форума, это не мамина сися  Улыбающийся
Записан
soaup
Гость
« Ответ #23 : Июль 17, 2014, 15:01 »

Тем не менее, я все таки сделал. Спасибо всем за помощь!
Записан
Hrundel
Гость
« Ответ #24 : Июль 17, 2014, 23:47 »

... Не знаю, как тут на форуме плюсы ставить...

А вот никак и не поставить Улыбающийся

Слава Богу! Это же, ни какой-нибудь паршивый cyberforum.  Смеющийся Смеющийся Смеющийся
« Последнее редактирование: Июль 17, 2014, 23:50 от Hrundel » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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