OpenSG
Написано в | С++ |
---|---|
Операционная система | Windows , Linux , Солярис , OS X |
Тип | Граф сцены |
Лицензия | LGPL |
Веб-сайт | исходная кузня |
OpenSG — это система графов сцен для создания графических программ реального времени, например, для приложений виртуальной реальности. Он разработан в соответствии с принципами открытого исходного кода, имеет лицензию LGPL и может использоваться свободно. Он работает в Windows , Linux , Solaris и OS X и основан на OpenGL .
Его основными особенностями являются расширенная многопоточности и кластеризации поддержка (с отрисовкой по первой и последней сортировке , среди других методов), хотя он также прекрасно пригоден для использования в однопоточных односистемных приложениях.
Это не часть Khronos Group .
История
[ редактировать ]Он был запущен, как и многие другие системы, в конце исчезновения графов сцен в 1999 году, когда Microsoft и SGI умер проект по графическому API по Фаренгейту . Учитывая, что на рынке и на горизонте не было другой системы графов сцен с теми функциями, которые хотели авторы, они решили создать свою собственную.
OpenSG не следует путать с OpenSceneGraph , который представляет собой совершенно другой API графа сцены, чем-то похожий на OpenGL Performer . Разработка обоих началась примерно в одно и то же время, и оба выбрали схожие названия.
Технология
[ редактировать ]OpenSG — это граф сцены, подобный многим другим, но обладающий рядом уникальных особенностей, которые отличают его от других. Он имеет блокированную систему управления состоянием, позволяющую снизить затраты на оптимизацию изменений состояния, очень гибкий обход и другие механизмы, позволяющие обмениваться данными во время выполнения и улучшать основные структуры данных, но самым необычным аспектом является многопоточный подход. [ 1 ]
Графы сцен, как известно, являются трудной целью для многопоточности, поскольку они содержат очень большие структуры данных, легко занимающие сотни мегабайт памяти. Дублировать их невозможно из-за больших накладных расходов. Многие графы сцен просто блокируют отдельные узлы, чтобы предотвратить повреждение данных из-за параллельной записи, но это лишь частичное решение. Состояние графа сцены представлено всем графом сцены, только защита отдельных узлов может привести к противоречивым результатам (например, при запуске асинхронного физического моделирования только обновление частей графа приведет к отображению частичных шагов моделирования). OpenSG использует выборочную мультибуферизацию, дублируя небольшие части графа для каждого потока, который необходимо защитить, одновременно разделяя объемные данные, такие как массивы вершин и изображения текстур, и дублируя их только с использованием механизма копирования при записи. Синхронизация изменений для отдельных потоков осуществляется с использованием подхода со списком изменений, который обеспечивает минимальные накладные расходы.
Тот же механизм также обеспечивает очень гибкую и эффективную кластеризацию. Чтобы синхронизировать приложение, работающее на нескольких машинах, на каждую машину отправляются только изменения для каждого кадра и интегрируются в локальный граф сцены. Таким образом, различие между локальными и удаленными изменениями практически незаметно. Приложению, которое хочет работать в кластере, просто нужно открыть ClusterWindow, который может распределять все изменения по кластеру и может очень легко управлять Powerwall или CAVE, не беспокоясь о протоколах распространения и других сложностях.
Люди
[ редактировать ]Проект был начат Дирком Райнерсом , Герритом Воссом и Йоханнесом Бером . в него внесли вклад многие другие люди, в первую очередь Карстен Нойманн, который в настоящее время выполняет функции главного сопровождающего.
Ссылки
[ редактировать ]- ^ Восс, Г.; Бер, Дж.; Райнерс, Д.; Рот2, М. (1 января 2002 г.). «Многопоточная безопасная основа для графов сцен и ее расширение на кластеры» . Материалы четвертого семинара Eurographics по параллельной графике и визуализации . ЭПГГВ '02. Эр-ла-Виль, Швейцария, Швейцария: Ассоциация Еврографики: 33–37. ISBN 1-58113-579-3 .
{{cite journal}}
: CS1 maint: числовые имена: список авторов ( ссылка )