Привет.
Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Серьезно с C++ не работал, только C, т.е. на данном этапе мне не важно с чем разбираться (т.к. все равно придется) — Qt, WinAPI, MFC, WTL...
Как-то давно писал на чистом WinAPI (тогда Qt даже не было), механизм у WinAPI мне кажется очень прозрачным, а вот скорость разработки, как мне кажется, низкая.
Посоветуйте на чем остановиться.
Платформа — только Windows.
Здравствуйте, prg1000, Вы писали:
P>Привет. P>Задача — визуализация данных в виде графиков в реальном времени с частотой 1 кГц. P>Серьезно с C++ не работал, только C, т.е. на данном этапе мне не важно с чем разбираться (т.к. все равно придется) — Qt, WinAPI, MFC, WTL... P>Как-то давно писал на чистом WinAPI (тогда Qt даже не было), механизм у WinAPI мне кажется очень прозрачным, а вот скорость разработки, как мне кажется, низкая. P>Посоветуйте на чем остановиться.
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, Qbit86, Вы писали:
Q>>Зачем визуализировать с частотой выше 60 Гц? X>чтоб сохранять в файл или видеопоток?
X>а по сабжу: Qt + QWT.
Неправильно написал — данные приходят с такой частотой, их нужно отобразить на экране.
Re: Визуализация данных в реал. времени. Что выбрать на C++ для
Здравствуйте, prg1000, Вы писали:
P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Я бы сказал, что это OpenGL в режиме 2D. В Qt для OpenGL есть специальные возможности.
Здравствуйте, prg1000, Вы писали:
P>Неправильно написал — данные приходят с такой частотой, их нужно отобразить на экране.
Если хочется тупо использовать компьютер в качестве олдскульного электронно-лучевого осциллографа, то таки да, без OpenGL или DirectX какого-нибудь не обойтись. И не факт, что сработает. Впрочем, даже если и будет работать "немножко не так", например, с пропуском (возможно, существенной) части сигнала, то обнаружить это будет тяжело, а доказать — практически невозможно Но я бы так не делал, если честно, а попробовал бы что-нибудь типа стробоскопии или накопления ("быстрый", возможно даже, ассемблерный код набирает отсчеты, а "медленный", высокоуровневый — отображает накопленный, скажем, за 100мс массив данных). QwtPlot (Qwt тут кто-то выше советовал) — вариант, но лично мне он не нравится исключительно из эстетических соображений.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re: Визуализация данных в реал. времени. Что выбрать на C++
Здравствуйте, prg1000, Вы писали:
P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Зачем? Оператор все равно разницы не увидит между 60 и 1000, а задачу ты усложняешь сильно.
Кстати, Windows и реальное время несовместимы. Так что не усложняй на ровном месте.
Здравствуйте, prg1000, Вы писали:
P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
А что из себя представляют эти данные? Их же не надо отображать с частотой 1 кГц?
Здравствуйте, slava_phirsov, Вы писали:
_>Если хочется тупо использовать компьютер в качестве олдскульного электронно-лучевого осциллографа, то таки да, без OpenGL или DirectX какого-нибудь не обойтись. И не факт, что сработает. Впрочем, даже если и будет работать "немножко не так", например, с пропуском (возможно, существенной) части сигнала, то обнаружить это будет тяжело, а доказать — практически невозможно Но я бы так не делал, если честно, а попробовал бы что-нибудь типа стробоскопии или накопления ("быстрый", возможно даже, ассемблерный код набирает отсчеты, а "медленный", высокоуровневый — отображает накопленный, скажем, за 100мс массив данных). QwtPlot (Qwt тут кто-то выше советовал) — вариант, но лично мне он не нравится исключительно из эстетических соображений.
Спасибо. Вот тут меня как раз интересует насколько свободно я смогу пользоваться возможностями OpenGL в Qt. Хватит ли этого для задачи?
Re[2]: Визуализация данных в реал. времени. Что выбрать на C++ для
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, prg1000, Вы писали:
P>>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
AD>А что из себя представляют эти данные? Их же не надо отображать с частотой 1 кГц?
Конечно нет. У меня раз в секунду приходит 1000 точек, вот их мне каждую секунду и нужно видеть на экране. Тут уже дело реализации, конечно. Можно ведь их обновлять на экране каждую секунду, а можно и чаще, но не более чем частота обновления экрана монитора естественно (и уж точно не 1 кГц)))
Re: Визуализация данных в реал. времени. Что выбрать на C++ для
Здравствуйте, prg1000, Вы писали: P>Привет. P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Вот данные приходят в real time, интегрируются и отображаются.
Это все в Sciter (Кто про что а голый про баню).
1 кГц это одно событие в одну миллисекунду. Стандаратное значение FPS для экранных анимаций — 60, или одно обновление экрана каждые 16ms.
Windows кстати и WM_PAINT чаще слать не будет. Sciter тоже выодит анимации с 60 FPS max.
По любому нужно как-то твой сигнал усреднять, фильтровать — конвертирвать к виду удобному для восприятия человеком.
Здесь создается и показывается окно. Также описана native function (helloWorld()) для скрипта.
Например твоя native function предоставляет данные для скрипта. Скрипт скажем по таймеру опрашивает (вызывает) данную функцию и строит/рисует график.
Здравствуйте, prg1000, Вы писали:
P>Спасибо. Вот тут меня как раз интересует насколько свободно я смогу пользоваться возможностями OpenGL в Qt. Хватит ли этого для задачи?
Боюсь, что скорее нет. Вот если бы мы были пчелы и "частота мерцания" у нашего зрительного анализатора (глаз + зрительные отделы мозга) была килогерцовой, то OpenGL был бы "заточен" под такую частоту. А так — его писали люди, для людей, и делали это из расчета, что обновлять картинку чаще, чем 100 раз в секунду никому не потребуется. А ты хочешь — 1000 раз в секунду. Впрочем, попробуй, вдруг что получится. Было бы интересно узнать о результатах, но, повторюсь, я бы так делать не стал.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Здравствуйте, prg1000, Вы писали:
P>>>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Для того, чтобы каждую секунду отображать график из 1000 точек, по скорости подойдёт всё что угодно. Поэтому что хорошо знаешь, то и используй.
Здравствуйте, slava_phirsov, Вы писали:
_> Вот если бы мы были пчелы и "частота мерцания" у нашего зрительного анализатора (глаз + зрительные отделы мозга) была килогерцовой, то OpenGL был бы "заточен" под такую частоту. А так — его писали люди, для людей, и делали это из расчета, что обновлять картинку чаще, чем 100 раз в секунду никому не потребуется.
Откуда такие познания об OpenGL и о людях его писавших? И как именно его «затачивали под такую частоту»? И зачем так делали? И почему «заточенный» OpenGL используется для gpgpu, где пресловутые тысячи кадров в секунду не редкость? И что ему мешает выдавать те же тысячи кадров в секунду при визуализации несчастного графика? Да, как библиотеке рендера, ничего не мешает. Задача OpenGL нарисовать что попросили и сам процесс рендера никто намеренно не тормозит. Если вычислительная мощность позволяет, то будет высокий fps.
Естественно ограничение на fps возникает совсем не в OpenGL, а в средствах вывода — в скорости работы монитора или проектора. Если обновлять изображение быстрее чем монитор его может отобразить, то это лишь отправит в утиль часть картинки и, возможно, приведёт к заметным артефактам в изображении. И если условных 60 fps достаточно, то можно просто ставить рендер на паузу, если он работает слишком быстро. И вот это вот действительно делается. Но обычно для всей графической подсистемы, а не только для OpenGL (хотя многие платформы и предоставляют расширения к API для этой цели).
Если же проектор может отобразить 5000 кадров в секунду, то тот же OpenGL вполне может выступать источником таких данных (пример).
Здравствуйте, watchmaker, Вы писали:
W>Если вычислительная мощность позволяет, то будет высокий fps.
Ключевое слово — "если". И никто не обещал для какой-нибудь встроенной карточки, что она это позволяет. Может позволяет, может — нет Надо пробовать.
W>Естественно ограничение на fps возникает совсем не в OpenGL, а в средствах вывода — в скорости работы монитора или проектора.
Как насчет обмена между картой и процессором? Карточка будет получать данные от процессора. 1000 раз в секунду. А процессор, помимо подготовки данных (он ведь их, как я понял вопрос ТС, откуда-то читает, с внешнего устройства) и пересылки их карточке будет занят еще кучей других дел.
W>Если же проектор может отобразить 5000 кадров в секунду, то тот же OpenGL вполне может выступать источником таких данных (пример).
Вот с трудом представляю себе, зачем нужен проектор отображающий 5000 кадров в секунду — показывать порно пчелам? Никто из зрителей-людей и не заметит разницы между 5000, 1000, и 200 Гц. И сильно сомневаюсь, что у ТС именно такое устройство отображения. Хотя, кто знает...
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
W>>Если вычислительная мощность позволяет, то будет высокий fps. _>Ключевое слово — "если". И никто не обещал для какой-нибудь встроенной карточки, что она это позволяет. Может позволяет, может — нет Надо пробовать.
OMG. «Если» написано для того чтобы фраза включала и более ресурсоёмкие задачи, ибо они всегда существуют. Что же касается встроенных видеокарточек, то для объёмов, указанных автором темы, скорость рендеринга вполне достигает десятка тысяч кадров в секунду, glxgears как пример тому.
_>Как насчет обмена между картой и процессором? Карточка будет получать данные от процессора. 1000 раз в секунду.
Для указанных объёмов — это мелочи.
W>>Если же проектор может отобразить 5000 кадров в секунду, то тот же OpenGL вполне может выступать источником таких данных (пример).
_>Вот с трудом представляю себе, зачем нужен проектор отображающий 5000 кадров в секунду — показывать порно пчелам?
По ссылке есть и описание, и демонстрация. _>Никто из зрителей-людей и не заметит разницы между 5000, 1000, и 200 Гц.
Отнюдь. Для вышепоказанного проектора это было бы очень заметно.
_>И сильно сомневаюсь, что у ТС именно такое устройство отображения. Хотя, кто знает...
У автора темы вообще не стоит задача показывать что-то чаще обновления монитора — прочти тему
Здравствуйте, watchmaker, Вы писали:
_>>Как насчет обмена между картой и процессором? Карточка будет получать данные от процессора. 1000 раз в секунду. W>Для указанных объёмов — это мелочи.
Сила не в объеме. Для начала, процессор должен прочитать и обработать данные (неустановленным образом), а затем вызовом соответствующих функций API OpenGL (glDrawArrays ) отрисовать график. Он это будет успевать делать в реальном времени, 1000 раз в секунду, без перебоев? Почему-то думаю, что нет.
W>Отнюдь. Для вышепоказанного проектора это было бы очень заметно.
Я не видел, ты не видел, так что это уже из серии "сколько демонов уместится на кончике иглы"...
W>У автора темы вообще не стоит задача показывать что-то чаще обновления монитора — прочти тему
Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Автор, как я понял, хочет решить задачу "в лоб": пришли данные — перерисовал картинку. Вопрос: сработает ли такой подход с использованием аппаратного ускорения (OpenGL, DirectX). Я считаю — вряд ли.
P.S. "реальное время" отменяется — ТС написал ниже, что отображать данные достаточно 1 раз в секунду. 1000 точек. В таком случае применение OpenGL просто теряет смысл.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)