Змінюй хід війни! Допомагай ЗСУ!

Оконное приложение C# с OpenGL рисованием кривой

🔴 21:54 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 08.04.2009
Повідом.: 18006
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #1
Оконное приложение C# с OpenGL рисованием кривой

Придумал себе гемор на жопу - нужна программа - самописец для графического представления данных разных кривых и режимом осциллографа.
Умею под винду только C#, потому в нём и ваяю. В GDI рисует очень медленно, по єтому стоит вопрос о опенгл.

Короче, подключил Tao Freeglut.
Ну рисовать оно рисует, рисует как рисует, получается что-то типа такого
0ffchg.png


Не нравится следующее:
1. Начало отсчета окна - левый верхний угол. То есть, мне надо самому писать инверсию. Бо у всех нормальных людей знак вектора + по Y это вверх, а тут получается вниз.
2. Нет вывода текста OpenGLем. Можно сделать но будет калично.

Вопрос:
1. Есть ли какая-то другая либа, где уже реальзованы по нормальному 2 минуса выше (чтобы можно было менять направление осей в окне и писать текст, не заморачиваясь)
2. Может я просто не знаю и в Тао тоже это можно?
 
Останнє редагування:
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #2
О. Текст как писать сносно - нашел уже.
Код:
      void drawText (float x, float y, string text)
        {
            Gl.glRasterPos2f(x, y);
            foreach (char char_for_draw in text)
            { // glutBitmapCharacter использует шрифт GLUT_BITMAP_9_BY_15. 
                Glut.glutBitmapCharacter(Glut.GLUT_BITMAP_9_BY_15, char_for_draw);
            }
        }
осталось по копаться как менять шрифт.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #3
По поводу инверсии - смотри куда-то в сторону view matrix, там где-то в ячейке, отвечающей за translate Y нужно -1 вставить. Или юзай glTranslate. Но не забывай делать glPushMatrix/glPopMatrix, когда текст рендеришь, а то вверх ногами отрисуется.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #4
Поиск в Nuget по запросу chart дает печальные результаты? Если проверены какие то либы от туда с херовой производительностью то поделись мб кому-то пригодится.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #5
Поиск в Nuget по запросу chart дает печальные результаты? Если проверены какие то либы от туда с херовой производительностью то поделись мб кому-то пригодится.

Бесконечный скроллящийся чарт? Это че такое?
10 тыщ точек в секунду ТС, конечно, не покажет, места не хватит, но даже на паре-тройке сотен думаю любой чарт загнется.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #6
Бесконечный скроллящийся чарт? Это че такое?
10 тыщ точек в секунду ТС, конечно, не покажет, места не хватит, но даже на паре-тройке сотен думаю любой чарт загнется.

Все велосипеды давно придуманы часть из них должны ездить:D
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #7
Сдается мне, шо напейсать такое проще, чем найти что-то подобное в куче сторонних велосипедов, попробовать, обломаться, взять что-то другое, и долго его прикручивать до желаемого резалта.
Тем более, у аффтара уже куча работы проделана, вон даже бэкграунд разлинеен и какой-то текст выводится.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #8
По поводу инверсии - смотри куда-то в сторону view matrix, там где-то в ячейке, отвечающей за translate Y нужно -1 вставить. Или юзай glTranslate. Но не забывай делать glPushMatrix/glPopMatrix, когда текст рендеришь, а то вверх ногами отрисуется.

Всё решилось проще - всесто TAO фреймворка был рпименен openTK.
Как обновлять порт тао - хер нашол. И в ОнПэйнт событии писал отрисовку, инвалидэйт применял - нихуя контрол не работает без магии.
В опенТК - контрол как контрол, Invalidate - без проблем обновляет порт, даже mailloop() опенЖєЄлю не писал (хотя встречал, что надо так запускать).
И настройки отображения есть, чтобы сразу 0 был в левом нижнем.

Тао - загадка.
Просто один раз отрисовівает и потом хоть кол на нём теши.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #9
Поиск в Nuget по запросу chart дает печальные результаты? Если проверены какие то либы от туда с херовой производительностью то поделись мб кому-то пригодится.

Затшем мне чарт? Не, есть либы сторонние, но у меня к самому чарту, как раз, вопросов нет - это осциллоскоп. Тупо валятся данные, сохраняются в массив, и отрисовывается часть массива, в засивисмости от настроек.
Самописец для не очень быстрых процессов - до тысячи сэмплов в секунду.
Не так уже и много, чтобы применять какие-то хитросделаные либы. Просто вертекс буфер. Там даже fps неважен - 1000 точек в окне 512 - окно отрисовывается пол-секунды. ни чего особо страшного если отрисовываться будет кусками - глаз не увидит всё равно.
Просто тупо средствами .NET не успевает по сериал-порту считывать и отрисовывать - отстает чтение из порта, буфер наполняется и если долго так делать - отключаешь порт, а эта ебатория продолжает рисовать :) Ну, или виснет.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #10
Бесконечный скроллящийся чарт? Это че такое?
10 тыщ точек в секунду ТС, конечно, не покажет, места не хватит, но даже на паре-тройке сотен думаю любой чарт загнется.

В связи с ебанутостью винды по отношению к ком-порту - чарт в винформс начинает отставать от реальных данных уже на 30 байтах в секунду (если поинты 8-битные, на каждый байт - вершина ломаной). На 100 в секунду - можно визуально зафиксировать (и даже посчитать) какое время винда отводит на процесс, который, собственно, рисует. Потому как оно начинает тупить. Особо хорошо видно если поднять приоритет окну - он начинает рисовать быстрее, но явными кусками.
1000 акций по отрисовке - недостижима вообще. Приложение ляжет.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #11
Шото хуйня у тебя какая-то, даже жидиай с этим бы справился если рисовать правильно и не делать тупо битблит на каждую новую точку.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #12
Шото хуйня у тебя какая-то, даже жидиай с этим бы справился если рисовать правильно и не делать тупо битблит на каждую новую точку.

В WPF - да, он на директ завязан, в винформ - нет.
P.S. Ну и... опенгл, какбе, пусть будет. Если надумаю присандалить туда USB-осциллограф. Там битрейт поболе будет, хотя, тоже не космос, так как ограничен скоростью USB.
Опять же, нормально скролиться будет, когда надо ползунком двигать быстро всю кривую. Короче, хочу опенЖЛ.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #13
Затшем мне чарт? Не, есть либы сторонние, но у меня к самому чарту, как раз, вопросов нет - это осциллоскоп. Тупо валятся данные, сохраняются в массив, и отрисовывается часть массива, в засивисмости от настроек.
Самописец для не очень быстрых процессов - до тысячи сэмплов в секунду.
Не так уже и много, чтобы применять какие-то хитросделаные либы. Просто вертекс буфер. Там даже fps неважен - 1000 точек в окне 512 - окно отрисовывается пол-секунды. ни чего особо страшного если отрисовываться будет кусками - глаз не увидит всё равно.
Просто тупо средствами .NET не успевает по сериал-порту считывать и отрисовывать - отстает чтение из порта, буфер наполняется и если долго так делать - отключаешь порт, а эта ебатория продолжает рисовать :) Ну, или виснет.
:confused: Мб проблема в том как ты считываешь?Просто ты с одной стороны говориш что хер на скорость отрисовки а с другой опенЖеЭль призываешь на помощь. Не блокируй читающий с порта поток отрисовкой графики :незнаю: Проверить относительно легко порт у тебя шалит или отрисовка: выкинь отрисовку посчитывай в свой буфер байтов данные, позамеряй длительность цикла или на фиксированом таймауте по Thread.Sleep(num) растет ли у тебя BytesToRead в бесконечность если растет при любых num то вообще без толку любой график применять:D А если стабильно то смотри где ты провтыкал.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #14
:confused: Мб проблема в том как ты считываешь?Просто ты с одной стороны говориш что хер на скорость отрисовки а с другой опенЖеЭль призываешь на помощь. Не блокируй читающий с порта поток отрисовкой графики :незнаю: Проверить относительно легко порт у тебя шалит или отрисовка: выкинь отрисовку посчитывай в свой буфер байтов данные, позамеряй длительность цикла или на фиксированом таймауте по Thread.Sleep(num) растет ли у тебя BytesToRead в бесконечность если растет при любых num то вообще без толку любой график применять:D А если стабильно то смотри где ты провтыкал.

Читать надо асинхронно а не наваливать каждую секунду
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #15
:confused: Мб проблема в том как ты считываешь?Просто ты с одной стороны говориш что хер на скорость отрисовки а с другой опенЖеЭль призываешь на помощь..

Скорее всего, действительно нельзя рисовать каждій раз после получения чего-то в буфер Serial порта.
Но долбаться уже смісла не имеет - опенЖЛ всё равно пусть будет, раз залез в него.
Другое дело, что под .NET там охренительно корявій зоопарк.
Tao freeglut - имеет проблемы с самой его работой. при том, что в нём таки есть рендер текста его средствами. но запустить его не удается(сам порт обновить. Он 1 раз рисует и всё. Если инициализирую по мурзилке - компилится, но прога вываливается), и я не вижу на форумах положительных решений. То есть, вопросы возникают регулярно, но ответов на них так и нет.
Ну, и он давненько не поддерживается.

OpenTK - другая проблема, у него убрали TextPrinter и писать придётся через жопу, создавая текстуры из растровых фортов.
но этот, хотя бы, работает.

Есть ещ' SharpGL - его пока не трогал.

P.S. Бля, а что, нормального инструмента, современного и РАБОЧЕГО под .NET для опенЖЛя нету???
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #16
Читать надо асинхронно а не наваливать каждую секунду

Согласен. Но тогда уже и выводить во что-то серьёзнее GDI.
короче, тема про ОпенГЛ и его прикручивание к C# :) Целесообразность давай не обсуждать :) Єто данность. Так повелел всевышний.
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #17
P.S. Бля, OpenGL либі для .NET - сцуко, кровь из глаз...
попробовал подключить SharpGL. Это ёбаный пиздец. Версий с десяток, понять в какой всё работает из нугета - нереально.
Их шо, пока все не попробуешь - не узнаешь? Проверил 3 - в одной нет контрола, в другой - есть, но только колорпикер, в dll, в которой Scene - нет контрола.
Бляцкий цирк.
Поа работает только OpenTK, хоть как-то, без текста (то есть, с рукописнім рендером через текстуры).
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #18
Бля, а что, нормального инструмента, современного и РАБОЧЕГО под .NET для опенЖЛя нету???
Нету, и не под что другое нету, потому шо это изврат, ОГЛ - это только Ц и кресты.
Хотя каюсь, на заре 2000-х пейсал под него из-под делфи:)
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #19
Нету, и не под что другое нету, потому шо это изврат, ОГЛ - это только Ц и кресты.
Хотя каюсь, на заре 2000-х пейсал под него из-под делфи:)

Так студия могет и в С++ (одиин хуй под дотнет), ты уточняй какие кресты :D Мне всё равно на чём из этих 2х писать, я в них одинаково с MSDN пишу, ибо ни того ни того не гуру, но основы знаю обоих.
В какой среде на крестах писать с нормальным ОГЛ?
P.S> Может на директХ перейти? Там ситуация лучше?
 
  • 🔴 21:54 Повітряна тривога в Харків.обл.
  • #20
ты уточняй какие кресты
Каноничные:увага:
И без всяких ебаных дотнетов! Тока unmanaged!

В какой среде на крестах писать с нормальным ОГЛ?
В студии и пиши.

Может на директХ перейти? Там ситуация лучше?
Впизду, это вообще маразм тот еще.
У тебя щас проблемы что-то не отрисовывается, а на на директе у тебя будет ебля с ебаным COM-ом и интерфейсами.
 
Назад
Зверху Знизу