Здравствуйте!
Краткая предыстория. ОС FreeBSD, нет программы-рисовалки для создания 2D растровой анимации, быстрая оценка сложности реализации проекта и ... .
Итог: родил нечто (https://bitbucket.org/rndfax/sdp) - OpenGL программа с поддержкой (по крайней мере) планшетов Wacom. Писано на Си с классами, а то и хуже.
По сути, был вдохновлён программой Plastic Animation Paper (http://animationpaper.com/), но которая обладала фатальными недостатками.
Это нечто получилось в виде тестовой площадки (i.e. помойка) со следующими вытекающими:
1) из blender'а вытащил библиотеку GHOST (https://bitbucket.org/rndfax/libghost) - это как GLUT, только с плюшками. Пришлось, правда, отключить фичу drag-n-drop (кажись, она тянет за собой половину blender'а);
2) make происходит с информированием о том, сколько файлов осталось откомпилировать - реализовано через создание директории, которая используются в качестве лока (lock). cmake выводит информацию в процентах, я хотел такое же, но только на голом Makefile. Фигня, но прикольно;
3) есть слои, есть фрэймы, есть заливка, можно как-то рисовать.
На чём застрял.
Этот проект обладает фатальными недостатками:
1) нет GUI. А нужно выводить: слои, фреймы, инструменты и ещё всего разного полезного.
Пробовал CEGUI (http://cegui.org.uk/) и libRocket (http://librocket.com/). CEGUI - типа самая крутая вещь, которая может быть для создания GUI на OpenGL. Поднял, потом посмотрел, показалось, что шаг влево-вправо от стандартных вещей - всё, приехали. Чтобы сделать какой-то свой стиль нужно создать километровый файл с его описанием. Да, может быть, это есть неотъемлемая часть любого создания стиля. Но выглядит всё это устрашающе. Резюме: неосилил.
libRocket - HTML/CSS прямо в OpenGL. Но как оказалось, CSS совсем не тот CSS, который в интернетах, отсутствуют некоторые важные вещи, попытался их исправить и обнаружил, что там много нужно переписывать в самой библиотеки, а разработчики сказали типа «ну пока нам не надо, делать этого не будем» (https://github.com/libRocket/libRocket/pull/202).
Начал реализовывать свой вариант видения GUI для OpenGL (с некоторыми идеями из libRocket);
2) нет хороших кистей (brushes) для рисования. А по-хорошему нужно иметь в наборе простой карандаш, улучшенную версию того, какая сейчас кисть реализована (типа ручки что-ли), а так же smudge какой-нибудь tool (сейчас он есть, но, кажется, работает не так как надо) + lasso tool и трансформации выделенной области;
3) нет умной заливки. Те, кто пользуется GIMP'ом, наверное, заметили, что если что-то нарисовать, а потом залить, то возле контура останутся непрокрашенные части. Здесь у меня сейчас заливка умнее того, что в GIMP'е. У неё есть пороговое значение, когда нужно остановиться - простая константа. Но для решения задачи заливки нужна ещё более продвинутая логика - отслеживание прозрачности контура.
Почему свой проект-рисования-анимации.
1) PAP (http://animationpaper.com) - Windows/Linux/MacOS, больше не поддерживается, нет слоёв, ущербный карандаш, lasso-tool чрезмерно кривой, только контуры, ограниченное пространство для рисования (а у меня типа бесконечное). Из плюх: простота.
2) Pencil2D (http://www.pencil2d.org) - глючное поделие, страшный код (хотя чё я на него, смотреть что ли должен?), разработчик его куда-то делся, бесконечное пространство для рисования, но нет границ кадра (один дядька уже писал, типа не видно где начало, а где конец. Ответ был: «используй слой камеры для этого» или как-то так, что не подходит для нормального пользования). В топку такое.
3) Krita (https://krita.org) - в составе комбайна calligra, что под KDE. Заявлена поддержка анимации. Во FreeBSD поставил её, там ещё старая версия, анимации нет, но рисовать настолько неудобно, по сравнению с тем же PAP, что ну его нафиг. Так же очень перегружен интерфейс. Патчить KDE под FreeBSD у меня желания нет, потому что комбайн.
4) TVPaint (http://www.tvpaint.com) - платный (АРРРР, где мой попугай?!) комбайн для анимации. Нет бесконечного поля для рисования, перегружен настолько сильно, что всасывается сам в себя.
TL;DR
Имея у себя силы что-то делать, сделал инструмент, который, с точки зрения меня, является удобным и простым в использовании. Теперь, чтобы довести его до логического завершения, нужно восполнить его фатальные недостатки, и тогда можно будет показать его людям, вдруг кому-то он тоже покажется удобнее, чем XXX. Но как организовать работу? По реализации своего GUI есть вопросы. По реализации кистей есть вопросы. По вообще организации проекта есть вопросы. Но как их разрешить, если чтобы их задать, боюсь, понадобится столь же большой монолог, а то и больше?