Processing:Библиотеки/planetarium
Содержание | Среда разработки Processing | Справочник языка Processing | Библиотеки | Примеры | Режимы программирования |
Черновик |
planetarium[1]
Класс
Обозначение
Описание
Библиотека planetarium создана для того, чтобы рисовать 3D-скетчи Processing в сферическом куполе, но с минимальными изменениями в коде скетча.
Она основана на проекте FullDomeTemplate от Кристофера Варнова. Его можно найти по этой ссылке.
Работа над библиотекой еще не закончена.
Что сделано
- Более аккуратный рендеринг.
- Изменяемый купол.
- Отладочная сетка (реализовано при помощи шейдеров).
- Включение/выключение рендеринга граней кубической текстуры.
- Наложение купольной 2D-сетки на этапе постобработки (к сожалению, серьезно замедляет производительность).
Планируется сделать
- Улучшение разрешения кубической текстуры (или хотя бы ее визуального качества).
- Рендеринг фонового 2D-слоя (возможно, это будет реализовано путем использования объекта PGraphics в качестве сэмплера для шейдера, но он конфликтует с samplerCube, и решения этому я пока не нашел).
- Настраиваемая точка просмотра.
- Четырех сторон для полного купола должно быть достаточно, для этого кубическую текстуру нужно повернуть на 45 градусов.
- Добавить возможность выбора просматриваемого места?
Изменения (технические)
- Этап рендеринга кубической текстуры теперь выполняется с помощью рейкастинга. То есть теперь вместо полусферы используются квадраты с рейкастингом.
- Сэмплинг кубической текстуры теперь выполняется при помощи билинейной фильтрации.
Как работает
Краткое описание того, как это все работает: 360-градусная сцена генерируется при помощи рендеринга сцены 6 раз для каждого направления – положительная часть оси X, отрицательная часть оси X и т.д.
Результат каждого рендеринга сохраняется в кубической текстуре, которая затем применяется на купольной сфере. Таким образом, библиотека вызывает блок draw() шесть раз за кадр, чтобы обновить соответствующую сторону кубической текстуры. Вообще, на самом деле, пять раз, а не шесть, потому что нижняя часть кубической текстуры в куполе не видна.
Следовательно, важно держать в уме, что если вам нужно выполнить какие-либо вычисления только 1 раз за кадр, тогда код для них нужно поместить в метод pre(). Аналогично вычисления, которые нужно выполнить только 1 раз после рендеринга, нужно поместить в метод post().
В данный момент библиотека «считает», что проектор расположен в центральной части купола, поэтому если проектор не отцентрирован, результат будет некорректным. Возможность использования нескольких проекторов в данный момент не поддерживается.