реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Быстрое отображение динамических данных, на какой основе сделать в Windows?
Кнкн
сообщение May 29 2017, 12:15
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



Посоветуйте, пожалуйста, на какой основе сделать быстрое графическое отображение
динамических данных в Windows? (1000 линий 30 fps)
(Direct2d , DirectX, OpenGL или что-то еще ?)
Go to the top of the page
 
+Quote Post
V_G
сообщение May 29 2017, 14:13
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Какие данные?
30 fps - это видео/кино.
Если речь о 2- и 3-мерных графиках, то если они будут дергаться со скоростью 30 fps, глазам будет некомфортно.
А вообще я делал спектроанализатор в WPF на С#, скорости хватало. Точнее, графика - в WPF, остальное (работа со звуковой картой, БПФ) - просто на Си. Еще точнее, БПФ - открытый пакет fftw.org, звуковуха из winAPI
Go to the top of the page
 
+Quote Post
_pv
сообщение May 29 2017, 15:12
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



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());
}
Go to the top of the page
 
+Quote Post
Кнкн
сообщение May 30 2017, 07:02
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



Большое спасибо!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 08:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016