Введение

Обзор OpenGL++

OpenGL++ была графической библиотекой, написанной на C++, которая поддерживала объектно-ориентированные структуры данных поверх 3D-графической системы OpenGL. Проект возник в результате партнерства между компаниями SGI, IBM и Intel, а позднее к нему присоединилась Digital Equipment Corporation. Он предназначался для предоставления API более высокого уровня, чем "низкоуровневая" поддержка OpenGL, а также для использования в качестве реализации Java3D. Разработка OpenGL++ была прекращена, когда SGI решила сотрудничать с Microsoft, что привело к проекту Fahrenheit, который также был закрыт.

Предыстория

Подавляющее большинство приложений, использующих 3D-системы, описывают объекты в своем "мире" в структуре данных, известной как граф сцены. Граф сцены обычно организован в виде древовидной структуры данных, где узлы представляют объекты, а связи – их взаимосвязи с другими объектами в мире. Например, стол может быть представлен одним объектом "стол" с несколькими связями, соединяющими его части: столешницу, ножки и т.д. Ключевым фактором для высокой производительности в 3D-приложениях является определение того, какие объекты в мире действительно видны с учетом текущей позиции и направления камеры. Например, объекты, находящиеся за камерой, не нужно отрисовывать. Быстрый обход графа сцены необходим для быстрого выполнения операции "отсечения" (culling). Как правило, реализация графов сцены оставалась за разработчиком, и часто встречались неудачные примеры, приводившие к низкой производительности. Компания SGI работала над рядом проектов, призванных помочь разработчикам создавать высококачественные графы сцены, но ни один из них не получил широкого распространения по различным причинам. Open Inventor был одним из таких примеров и предназначался для упрощения построения графа сцены, однако результаты не всегда отличались высокой производительностью. OpenGL Performer был аналогичным проектом, предназначенным для создания высокоскоростных сцен и поддержки большого количества объектов в "мире", но он не был особенно удобен в использовании.

Космо 3D

Команды Inventor и Performer уже осознали, что нет особых причин не объединить обе системы в одну, что позволило бы сочетать простоту разработки и высокую производительность. Это привело к созданию системы Cosmo3D – по сути, стандартизированного высокопроизводительного графа сцен, построенного на основе OpenGL. Cosmo3D представил новый формат файла, предназначенный для хранения целых сцен и всех необходимых данных для их восстановления – формат VRML, который до сих пор используется. Разработка продолжалась в течение 1997 года и включала несколько выпусков API. Однако, как отмечают в ARB, "было много работы, но относительно мало общения". Пока велась работа над OpenGL++, компании Sun и SGI также разрабатывали 3D-стандарт, подходящий для Java. Эти усилия в конечном итоге не увенчались успехом, и Sun выпустила Java3D. SGI предположила, что их работа над Cosmo была образцом реализации Java3D, и по мере развития этой работы в OpenGL++ эти планы были перенесены вместе с ней. В процессе определения спецификации OpenGL++, компания Sun заявила, что не заинтересована в участии в этом проекте, поскольку сосредоточена на разработке Java3D.

В конце

На заседании ARB в марте 1998 года, к всеобщему удивлению, SGI представила Fahrenheit – совершенно новый проект. В протоколе заседания ARB отмечено: «SGI считала критически важным сотрудничество с Microsoft, которая не двигалась в направлении совместимости, чтобы иметь возможность создавать продукты с добавленной стоимостью в среде Windows. Fahrenheit – это большой шаг в этом направлении». OpenGL++ был прекращен. Похоже, проект стал жертвой меняющихся приоритетов SGI в тот период, компании меняли направление, чтобы сотрудничать с более крупными игроками. Когда эти компании покинули область 3D-графики, чтобы сосредоточиться на других продуктовых нишах, SGI осталась единственным сторонником проекта, что противоречило их первоначальным целям. В конечном итоге, Microsoft оказалась единственной компанией, сохраняющей интерес к 3D-графике, и проект Fahrenheit начался и завершился вскоре после попыток разработки OpenGL++. Сегодня стандартизированного графа сцен не существует, и SGI практически вышла из разработки API. SGI опубликовала исходный код более ранней версии Open Inventor под открытой лицензией, но исходный код OGL++ так и не был доведен до удовлетворительного состояния. Финальной спецификации не существует, и, как и в случае с OpenGL, именно спецификация и идея открытой платформы должны были придать ей долгосрочную ценность, а не единичная реализация концепции графа сцен.