Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Рисование линии в OpenGl
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
soaup
Рисую через цикл линию из массива множетсва точек. Т.е.:
void glwindow::drawLine(QByteArray &bd, int y) { //bd - массив типа QByteArray
    glPointSize(1);
    glBegin(GL_POINTS);
    for (int j = 0; j < bd.size(); ++j) { //Для каждой точки из массива
        glColor3b(bd[j], bd[j], bd[j]); //Рисование точки, значение которой указывается как яркость
        glVertex2f(j, y); //Координаты точки
    }
    glEnd();
}


Есть контейнер содержащий несколько таких массивов точек. Такая функция вызывается в paintGL в цикле, где все массивы из контейнера отрисовываются.
Рисование множества таких линий отнимает довольно много производительности. Можно ли это как то по другому делать, более оптимизированным способом?
Iron Bug
Не очень понятно, в массиве заданы координаты ломаной линии или точек одной линии?
Для рисования одной линии целиком
glBegin(GL_LINES);
    glVertex2f(x1,y1);
    glVertex2f(x2,y2);
glEnd();

Конечно, если точки или отрезки должны иметь разную яркость и т.д., то проще не получится, придётся рисовать по точкам.

Для визуального "ускорения" можно рисовать в бэкбуфере и потом выводить его, как текстуру, уже в видимый буфер.
lanz
glVertex* это Immediate mode, он довольно медленый.
http://stackoverflow.com/questions/6733934...-mean-in-opengl

Надо использовать glDrawElements/Arrays, будет значительно быстрее
https://www.opengl.org/sdk/docs/man2/xhtml/...rawElements.xml
soaup
Цитата(Iron Bug @ 11.7.2014, 13:39) *
Не очень понятно, в массиве заданы координаты ломаной линии или точек одной линии?

В массиве QByteArray у меня 6656*8 байтов, каждый из которых нужно нарисовать как точку, используя значение байта как цвет.

Цитата(lanz @ 11.7.2014, 22:32) *
glVertex* это Immediate mode, он довольно медленый.
http://stackoverflow.com/questions/6733934...-mean-in-opengl

Надо использовать glDrawElements/Arrays, будет значительно быстрее
https://www.opengl.org/sdk/docs/man2/xhtml/...rawElements.xml

Не совсем понятно, как это можно сделать, если у меня массив QByteArray, а в нем 6656*8 байтов. Как мне эти байты использовать в качестве вершин?
lanz
Вот здесь практически все есть:
http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.html
Надо только с аттрибутами правильно определится. Очень хороший туториал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.