LINUX.ORG.RU

Программирование простейшей графики

 , ,


0

2

Всем привет.

Возникла одна идея для реализации которой нужно добавить немного 2D-графики. Графика нужна простейшая - пиксели, линии, графики. Нужно уметь реагировать на нажатия клавиш, минимальная поддержка каких-нибудь простых шрифтов.

Лет двадцать назад, будучи школьником, я что-то такое делал на Pascal, стандартного модуля Graph хватало с головой. А что есть из такого простого сейчас?

Лучше всего я знаю Perl, но тут с этим всё не просто. Можно рисовать отличные графики, генерировать или обрабатывать картинки, но вот для рисования «в реалтайме» и создания движущихся картинок сходу я ничего не нашёл. Есть Tk, в котором можно что-то похожее делать в окне, да и всё вроде бы. Как запасной вариант оставлю, но хотелось бы что-нибудь по новее.

Бегло посмотрел на python, из того, то заинтересовало - его биндинги к QT, но я пока не понял, можно ли там произвольную графику рисовать или же только шлёпать формочки из готовых компонентов.

На golang в принципе сходу не понял, есть ли что-нибудь подобное. Возможно плохо искал - я тут в модулях не очень хорошо ориентируюсь.

На Си или плюсах не искал, так как наверняка там всё это есть, но мне понадобится относительно много времени, чтобы найти и вникнуть.

Собственно, видимо, гуглить я разучился. Подскажите, что сейчас есть для максимально простой графики? Игровые движки я не рассматриваю - это уже как мне кажется сильный overhead. Мне нужно по сути нарисовать оси координат, разместить и двигать там простейшие фигурки. Суть в расчётах, а не в красивой графике. Реализация какой бы то ни было физики не нужна. Т.е. нужна минимальная визуализация. В целом, думаю, ЯП не важен, но желательно что-нибудь живое и не особо низкоуровневое. В идеале, чтобы не было слишком жирным. Платформа - только GNU/Linux. Можно в консоли(framebuffer?), можно с использованием каких-либо тулкитов. Как мне это видится было бы круто что-то типа подобного псевдокода:

my $pixel1 = {
 x = 10;
 y = 20;
 color = green;
}

put_pixel($pixel1);
if ($keycode = 'Up') {
  my $x = $x + 1;
  $pixel1->{x = $x};
  clrscr();
  put_pixel($pixel1);
}

if ($keycode = 'Left') {
  my $y = $y - 1;
  $pixel1->{y = $y};
  $pixel1->{color = 'red'};
  clrscr();
  put_pixel($pixel1);
}

Слышал про использование Raylib для таких целей. Должно быть попроще SDL.

Хорошо, если есть вариант писать на C или C++, можно взять оригинальную версию, но в списке биндингов даже Perl есть.

lwo
()
Последнее исправление: lwo (всего исправлений: 1)

если не требуется интерактив, а просто где-то в памяти надо сделать картинку и в неё натыкать пикселей, кривых и линий, то

самое простое это https://github.com/ArashPartow/bitmap

С++ header-only, bmp 24bpp но зато никаких зависимостей, только нужное и с простым интерфейсом

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)

Офигеть, сколько всяких разных вариантов! Круто. Сейчас пока читаю то, что накидали.

Очень понравился Amulet, но жалко, что полностью отдельный.

SDL - отличный вариант, но для моей задачи выглядит сложноватым.

Raylib тоже очень интересный вариант, радует обилие языков, но тоже требует ещё времени.

Сколько раз я компилял Cairo и почему-то не задумывался, что на нём можно рисовать.

Остальное тоже смотрю. В общем, на выходных будет чем заняться, почитаю, попробую варианты.

Большое спасибо всем отписавшимся за подсказки! Помогли понять состояние графики получше. Для меня, привыкшего писать исключительно консольно-текстовые утилиты или разнообразных демонов, это интересный опыт.

Если у кого ещё будут варианты, с интересом почитаю, так как пока ещё до конца не определился.

shell-script ★★★★★
() автор топика
Ответ на: комментарий от shell-script

На каком языке тебе удобнее всего писать? Если он дружит с си, попроси знающего и тот и другой накалякать тебе оберточку над каиро, хоть для шелла. Длятвлих хотело - чёс делов

pihter ★★★★★
()

Qt. Биндинги к нему есть и для перла и для питона, через QPainter можно рисовать красивную векторную графику в том числе в рилтайме.

slovazap ★★★★★
()