Processing:Библиотеки/planetarium

Материал из Онлайн справочника
Версия от 10:23, 8 сентября 2018; Myagkij (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску


Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


planetarium[1]

Класс

Обозначение

Описание

Библиотека planetarium создана для того, чтобы рисовать 3D-скетчи Processing в сферическом куполе, но с минимальными изменениями в коде скетча.

Она основана на проекте FullDomeTemplate от Кристофера Варнова. Его можно найти по этой ссылке.

Работа над библиотекой еще не закончена.

Что сделано

  • Более аккуратный рендеринг.
  • Изменяемый купол.
  • Отладочная сетка (реализовано при помощи шейдеров).
  • Включение/выключение рендеринга граней кубической текстуры.
  • Наложение купольной 2D-сетки на этапе постобработки (к сожалению, серьезно замедляет производительность).

Планируется сделать

  • Улучшение разрешения кубической текстуры (или хотя бы ее визуального качества).
  • Рендеринг фонового 2D-слоя (возможно, это будет реализовано путем использования объекта PGraphics в качестве сэмплера для шейдера, но он конфликтует с samplerCube, и решения этому я пока не нашел).
  • Настраиваемая точка просмотра.
  • Четырех сторон для полного купола должно быть достаточно, для этого кубическую текстуру нужно повернуть на 45 градусов.
  • Добавить возможность выбора просматриваемого места?

Изменения (технические)

  • Этап рендеринга кубической текстуры теперь выполняется с помощью рейкастинга. То есть теперь вместо полусферы используются квадраты с рейкастингом.
  • Сэмплинг кубической текстуры теперь выполняется при помощи билинейной фильтрации.

Как работает

Краткое описание того, как это все работает: 360-градусная сцена генерируется при помощи рендеринга сцены 6 раз для каждого направления – положительная часть оси X, отрицательная часть оси X и т.д.

Результат каждого рендеринга сохраняется в кубической текстуре, которая затем применяется на купольной сфере. Таким образом, библиотека вызывает блок draw() шесть раз за кадр, чтобы обновить соответствующую сторону кубической текстуры. Вообще, на самом деле, пять раз, а не шесть, потому что нижняя часть кубической текстуры в куполе не видна.

Следовательно, важно держать в уме, что если вам нужно выполнить какие-либо вычисления только 1 раз за кадр, тогда код для них нужно поместить в метод pre(). Аналогично вычисления, которые нужно выполнить только 1 раз после рендеринга, нужно поместить в метод post().

В данный момент библиотека «считает», что проектор расположен в центральной части купола, поэтому если проектор не отцентрирован, результат будет некорректным. Возможность использования нескольких проекторов в данный момент не поддерживается.

Синтаксис

Параметры

Возвращаемое значение

Пример

См.также

Внешние ссылки