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

Статус: Offline
Реєстрація: 08.04.2009
Повідом.: 18271
Оконное приложение C# с OpenGL рисованием кривой

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

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


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

Вопрос:
1. Есть ли какая-то другая либа, где уже реальзованы по нормальному 2 минуса выше (чтобы можно было менять направление осей в окне и писать текст, не заморачиваясь)
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);
            }
        }
осталось по копаться как менять шрифт.
 
По поводу инверсии - смотри куда-то в сторону view matrix, там где-то в ячейке, отвечающей за translate Y нужно -1 вставить. Или юзай glTranslate. Но не забывай делать glPushMatrix/glPopMatrix, когда текст рендеришь, а то вверх ногами отрисуется.
 
Поиск в Nuget по запросу chart дает печальные результаты? Если проверены какие то либы от туда с херовой производительностью то поделись мб кому-то пригодится.
 
Поиск в Nuget по запросу chart дает печальные результаты? Если проверены какие то либы от туда с херовой производительностью то поделись мб кому-то пригодится.

Бесконечный скроллящийся чарт? Это че такое?
10 тыщ точек в секунду ТС, конечно, не покажет, места не хватит, но даже на паре-тройке сотен думаю любой чарт загнется.
 
Бесконечный скроллящийся чарт? Это че такое?
10 тыщ точек в секунду ТС, конечно, не покажет, места не хватит, но даже на паре-тройке сотен думаю любой чарт загнется.

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

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

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

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

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

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

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

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

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

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

P.S. Бля, а что, нормального инструмента, современного и РАБОЧЕГО под .NET для опенЖЛя нету???
 
Читать надо асинхронно а не наваливать каждую секунду

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

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

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

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