NerpaGUI это библиотека для создания графического пользовательского интерфейса в 3D приложениях. Пока что используется старая( более простая система рендеринга ), изначально проект создавался на основе движка irrlicht, сейчас большая часть алгоритмов перенесено в саму библиотеку, что позволит в скором времени использовать и другие движки. Библиотека поддерживает создание и загрузку собственных элементов управления. Также поддерживается фабрика элементов. Используемые ресурсы редактируются через файлы конфигурации. Обработка событий возможна через сообщения и через систему сигнал-слот, наподобие QT.
Возможности:
+ Поддержка стилей ( используется css подобный синтаксис для описания внешнего вида и поведения контрола )
+ Помимо заранее опредленных можно описывать свои и назначать их элементам
+ Wrapper'ы для работы с Irrlicht 1.7 и 1.8
+ Сериализация свойств виджета( редактирование\сохранение\загрузка в удобном для пользователя виде )
+ Сохранение\загрузка виджетов из файлов (xml-описание)
+ Поддержка скриптов ( Lua5.1+свойства ), сделана возможность указать lua-обработчик для события элемента
+ Слои отрисовки элементов( размещение контролов на разных слоях отрисовки ) и менеджеры компоновки
Что изменилось:
+ Архитектура виджетов стала похожа на qt'шную, теперь нет абстрактных классов компонентов, от которых все другие должны наследоваться
+ Шрифты могут рендериться в текстуру (как трутайпные так и из картинок)
+ Своя система формирования конечного вида виджета, которая создает текстуру на основе описания стиля( для каждого класса, и даже отдельного контрола может быть задан свой стиль)
+ Изменена схема рендеринга ( сначала идет пререндеринг вне границ кода отрисовки, что значительно снижает время требуемое для отрисовки гуя, потом собственно сам рендеринг виджетов, затем событие пострендера... наверное там чтото тоже можно делать )
+ Переработаны алгоритмы сигналов\слотов - теперь можно подключать статические функции, да и сами алгоритмы стали использовать только внутренние типы данных
+ Библиотека независима от кода сторонних библиотек, есть несколько классов, переписав реализации которых можно будет использовать библиотеку для любого движка
+ Библиотека работоспособна на Linux\Windows платформах
+ Проекты для MSVS 2008, QtCreator, Code::Blocks
Минусы:
- Не до конца определились с архитектурой основного класса отрисовки и среды
- Много старого кода
- Мало виджетов переведено на новую систему рендеринга
Доступные виджеты
- Button(Кнопка)
- Label(Надпись)
- CheckBox(Флажок)
- RadioButton
- TabControl(закладки)
- Window(Форма)
- ListBox (список)
- ScrollBar
Скрины:
Пока немного.
Win7
Ubuntu12
Где можно посмотреть сырую версию...
SVNhttp://svn.code.sf.net/p/nerpagui/code/trunk
Заранее благодарен за вашу критику, идеи и пожелания.
Прикольно, когда заново попытаюсь на Irrlicht'e че-нить наклепать, попробую)
P.S. Прочитал название как НеграGUI
собственно пытаемся уйти от работы с конкретным движком, благо примеров достаточно ( OpenGUI, MyGUI, CeGUI и др )... большая часть кода зависит только от хедеров иррлихта, что решаемо переводом на свои...
Байкальская нерпа (для тех, кто слышит слово "нерпа" впервые):
dalerank
Уважуха, попробую подпилить к своему недодвижку. =) Давно искал либы для работы с гуи.
Качество исполнения не кокосовое
Согласен, многие части системы требуют доработки... к данной версии ставили целью сделать минимальные зависимости от других библиотек... иррлихт быд выбран как стартовый двиг изза свой простоты и возможности непосредственно обращаться к железному API для тестирования разных режимов работы... к лету планируется дописать врпер для огра... враперы для опенгл и дх написаны на 80%
Интересует как сделана часть, связывающая рендер библиотеки в движке.
Вкратце, если можно. Исходный код смотреть пока нет желания.
Началось все с того что гуи понадобился для комерческого проекта( не игра ). Сначала пытались использовать существующие разработки (mygui u opengui ), но както не сложилось. Потом мтали изобретать свои алгоритмы для отрисовки контролов, в частности пробовали адаптировать батчинг из mygui... Поджимали сроки сдачи демки, художник наткнулся на использовании скинов для гуи ирлихта, после доводки и переносе большей части функций в библиотеку оказалось что от движка для начала работы нужны две функции:
1. Функция загрузки текстур
2. Функция отрисовки спрайта
Есесно для обработки действий пользователя надо чтобы в систему гуи передавалист текущие координаты курсора и нажатия кнопок мыши и клавиатуры.
Чтобы обеспечить переносимость, эти функции вынесены в интерфейсный класс. Библиотеке передается указатель на класс реализующий эти функции.
Планируется перенос функций загрузки текстур в библиотеку в будущих релизах.
Я ответил на вопрос??? или нужен более детальный ответ???
НеграГУИ? Хорошее название.
Закончено изменение кода библиотеки. Теперь библиотека не зависит от других. Работоспособность проверена на Irrlicht и Ogre( Windows\Linux )
Для Irrlicht и Ogre сделаны врапперы, которые обеспечивают работу на этих движках. Работа с конкретным движком сводится к написанию 6 классов, обеспечивающих совместимость.
Прикольно, у меня только один вопрос: есть ли возможность сделать PropertyGrid (в смысле, не чтобы пользователи написали, а чтобы в библиотеке было) ? Без издевательств, при условии, конечно же, что есть (не)человеческий reflection.
dalerank
У меня давно есть идея поковырять блендер - там гуй полностью руками написан. Кажется, на opengl. Может быть, вам эта информация тоже будет полезна.
to Vinil: что понимается под PropertyGrid??? если свойства и их сериализация, то это уже есть... просто не до конца отлажено еще, поэтому пока не выкладываем...
to Fynivx: собственно библиотека пишется с оглядкой на такие проекты как CEgui, MyGUI, etc.. blender пока не смотрели, пасиб за наводку)))
нормальное качество исполнение, видно вляние иррлихта и qt, код - однородный и читабельный, было проделано много работы.
т.е. можно написать хоть D3D11 реализацию для AbstractPainter?
автору респект и удачи в дальнейшей разработке!
to PVSector: вполне реализуемо... наследник AbstractPainter должен реализовать некоторые функции по отрисовке( примитивы, текстуры ) и загрузке данных, я не замахивался на трехмерное исполнение гуя, так что все очень просто получилось...
для подключения нерпы к другой системе отрисовки надо написать реализацию классов курсора, текстуры и отрисовщика.
к сожалению за простоту подключения приходится платить тем, что основные функции(загрузка данных, отслеживание движений мыши) должен выполнять всетаки движок.
P.S. для того же Irrlicht'а уже есть законченная реализация драйвера для DX10 (http://irrlicht.sourceforge.net/forum/viewtopic.php?f=6&t=385… =dx11#p265411)
Тема в архиве.