Кнкн 5 29 мая, 2017 Опубликовано 29 мая, 2017 · Жалоба Посоветуйте, пожалуйста, на какой основе сделать быстрое графическое отображение динамических данных в Windows? (1000 линий 30 fps) (Direct2d , DirectX, OpenGL или что-то еще ?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 29 мая, 2017 Опубликовано 29 мая, 2017 · Жалоба Какие данные? 30 fps - это видео/кино. Если речь о 2- и 3-мерных графиках, то если они будут дергаться со скоростью 30 fps, глазам будет некомфортно. А вообще я делал спектроанализатор в WPF на С#, скорости хватало. Точнее, графика - в WPF, остальное (работа со звуковой картой, БПФ) - просто на Си. Еще точнее, БПФ - открытый пакет fftw.org, звуковуха из winAPI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 54 29 мая, 2017 Опубликовано 29 мая, 2017 · Жалоба fltk 100000 рандомных линий отрисовывает примерно 480мс. opengl даже через glbegin/end на каждую линию - за почти те же 580мс успевает отрисовать миллион линий. #include "FL/Fl.h" #include "FL/fl_draw.h" #include "FL/Fl_Double_Window.h" #include "FL/Fl_GL_Window.h" #include <FL/gl.h> #include "stdlib.h" #pragma comment (lib, "fltk.lib") #pragma comment (lib, "opengl32.lib") #pragma comment (lib, "fltkgl.lib") class MyWindow : public Fl_Double_Window { void draw(){ for(int i = 0; i<100000; i++){ fl_color(rand()*255/RAND_MAX,rand()*255/RAND_MAX,rand()*255/RAND_MAX); fl_line(rand()*1000/RAND_MAX,rand()*1000/RAND_MAX,rand()*1000/RAND_MAX,rand()*1000/RAND_MAX); } } public: MyWindow(int X, int Y, int W, int H, const char *L) : Fl_Double_Window(X, Y, W, H, L) {} }; class MyGLWindow : public Fl_Gl_Window { void draw(){ if (!valid()) { glLoadIdentity(); glViewport(0,0,w(),h()); glOrtho(-w(),w(),-h(),h(),-1,1); } glClear(GL_COLOR_BUFFER_BIT); for(int i = 0; i<1000000; i++){ glColor3f(1.0f*rand()/RAND_MAX, 1.0f*rand()/RAND_MAX, 1.0f*rand()/RAND_MAX); glBegin(GL_LINE_STRIP); glVertex2f(w()*(2.0f*rand()/RAND_MAX-1), h()*(2.0f*rand()/RAND_MAX-1)); glVertex2f(w()*(2.0f*rand()/RAND_MAX-1), h()*(2.0f*rand()/RAND_MAX-1)); glEnd(); } } public: MyGLWindow(int X, int Y, int W, int H, const char *L) : Fl_Gl_Window(X, Y, W, H, L) {} }; void callback(void * w) { static int t0 = GetTickCount(); int t1 = GetTickCount(); printf("%d\n",t1-t0); t0 = t1; ((MyGLWindow *)w)->redraw(); Fl::repeat_timeout(1.0/50, callback, w); } int main(){ // MyWindow win(100,100,1000,1000,"Test"); MyGLWindow win(100,100,1000,1000,"Test"); win.show(); Fl::add_timeout(1.0/50, callback, &win); return(Fl::run()); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кнкн 5 30 мая, 2017 Опубликовано 30 мая, 2017 · Жалоба Большое спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться