Методы для сглаживания сцены

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

Поддержки OpenGL, сглаживающиеся, который работает на уровне строк и многоугольников, а также на уровне всей сцены. В этой главе рассматриваются методы для всей сцены, сглаживающей (FSAA). Если Ваша точка потребностей приложения или строка, сглаживающаяся вместо полного сглаживания сцены, используйте созданный в точке OpenGL и функциях сглаживания строки. Они описаны в Разделе 3.4.2 в Спецификации OpenGL.

Три сглаживающихся метода в использовании сегодня мультивыбирают, избыточная выборка и смешивание альфа-канала:

Расширение ARB_multisample определяет спецификацию для полного сглаживания сцены. Это описывает выборка альфа-канала и мультивыборка. Спецификация в частности не упоминает избыточную выборку, но ее формулировка не устраняет избыточную выборку. Методы сглаживания, которые доступны, зависят от аппаратных средств, и фактическая реализация зависит от поставщика. Некоторое сглаживание поддержки видеокарт с помощью смеси мультивыборки и избыточной выборки. Методология, используемая для выбора выборок, может варьироваться также. Ваш лучший подход должен запросить средство рендеринга для обнаружения точно, что поддерживается. OpenGL позволяет Вам обеспечить подсказку для средства рендеринга, относительно которого сглаживания метода Вы предпочитаете. Подсказки доступны, поскольку средство рендеринга приписывает это, Вы предоставляете при создании объекта формата пикселя.

Меньшее подмножество средств рендеринга поддерживает EXT_framebuffer_blit и расширения EXT_framebuffer_multisample. Когда мультивыбранный renderbuffer разрешен к единственному визуализуемому цвету на пиксель, эти расширения позволяют Вашему приложению создавать мультивыбранные внеэкранные объекты кадрового буфера, представлять подробные сцены им, с точным управлением.

Инструкции

Помните следующий при установке полного сглаживания сцены:

Общий подход

Общий подход к установке полного сглаживания сцены следующие:

  1. Проверьте для наблюдения то, что поддерживается. Не все средства рендеринга поддерживают мультидемонстрационное расширение ARB, таким образом, необходимо проверить на эту функциональность (см. Функциональность Обнаружения).

    Для обнаружения, какое сглаживание определенное средство рендеринга поддерживает вызовите функцию CGLDescribeRenderer. Предоставьте свойство средства рендеринга kCGLRPSampleModes узнать ли мультивыборка поддержек средства рендеринга и избыточная выборка. Предоставление kCGLRPSampleAlpha видеть, поддерживает ли средство рендеринга альфа-выборку.

    Можно принять решение исключить неподдерживаемые аппаратные средства из поиска формата пикселя путем указания только аппаратных средств, поддерживающих мультидемонстрационное сглаживание. Следует иметь в виду, что при исключении неподдерживаемых аппаратных средств неподдерживаемые дисплеи ничего не представят. При включении неподдерживаемых аппаратных средств OpenGL использует нормальный искаженный рендеринг для неподдерживаемых дисплеев и мультивыбранный рендеринг к поддерживаемым дисплеям.

  2. Включайте эти буферные атрибуты в массив атрибутов:

    • Надлежащий демонстрационный буферный постоянный атрибут (NSOpenGLPFASampleBuffers или kCGLPFASampleBuffers) вместе с числом мультидемонстрационных буферов. В это время спецификация позволяет только один мультидемонстрационный буфер.

    • Надлежащие постоянные выборки (NSOpenGLPFASamples или kCGLPFASamples) вместе с числом выборок на пиксель. Можно предоставить 2, 4, 6, или больше в зависимости от какой поддержки средства рендеринга и сумма доступного VRAM. Значение, которое Вы предоставляете, влияет на качество, использование памяти и скорость работы мультивыборки. Для самой быстрой производительности, и использовать наименьшее количество суммы видеопамяти, указывают 2 выборки. При необходимости в большем качестве укажите 4 или больше.

    • Никакой атрибут восстановления ( NSOpenGLPFANoRecovery или kCGLPFANoRecovery). Несмотря на то, что включение этого атрибута не обязательно, рекомендуется препятствовать тому, чтобы OpenGL использовал нейтрализацию программного обеспечения в качестве средства рендеринга. Мультивыбранная производительность сглаживания является медленной в средстве рендеринга программного обеспечения.

  3. Дополнительно обеспечьте подсказку для типа сглаживания, Вы хотите — мультивыборка, избыточная выборка или альфа-выборка. Посмотрите Вывод подсказок для Определенного Метода Сглаживания.

  4. Позвольте мультивыбрать со следующей командой:

    glEnable(GL_MULTISAMPLE);

    Независимо от включенного состояния OpenGL всегда использует мультидемонстрационный буфер при предоставлении надлежащих буферных атрибутов при установке объекта формата пикселя. Если Вы не предоставили надлежащие атрибуты, разрешение мультивыборки не имеет никакого эффекта.

    Когда мультивыборка отключена, все значения покрытия установлены в 1, который дает появление рендеринга без мультивыборки.

    Все время некоторая листовая мультивыборка аппаратного обеспечения машинной графики включила. Однако не полагайтесь на аппаратные средства для имения включенной мультивыборки; использовать glEnable программно включать эту функцию.

  5. Дополнительно обеспечьте подсказки для алгоритма рендеринга. Вы выполняете этот дополнительный шаг, только если Вы хотите, чтобы OpenGL вычислил значения покрытия методом кроме универсального взвешивания выборок и усреднения их.

    Некоторая поддержка оборудования мультивыборка пропускает подсказку через расширение OpenGL —GL_NV_multisample_filter_hint. Эта подсказка позволяет реализации OpenGL использовать альтернативный метод разрешения цвета мультивыбранных пикселей.

    Можно указать, что OpenGL использует более быстрый или более хороший рендеринг путем вызывания функции OpenGL glHint, передача константы GL_MULTISAMPLE_FILTER_HINT_NV как целевой параметр и GL_FASTEST или GL_NICEST как параметр режима. Подсказки позволяют аппаратным средствам оптимизировать вывод, если это может. Нет никакой потери производительности или не возвратила ошибку для выпуска подсказки, это не поддерживается.

    Для получения дополнительной информации см. реестр расширения OpenGL для NV_multisample_filter_hint.

Вывод подсказок для определенного метода сглаживания

Когда Вы устанавливаете свое средство рендеринга и буферизуете атрибуты для полного сглаживания сцены, можно указать подсказку для предпочтения одного метода сглаживания по другим. Если базовое средство рендеринга не имеет достаточных ресурсов для поддержки то, что Вы запрашиваете, OpenGL игнорирует подсказку. Если Вы не предоставляете надлежащие буферные атрибуты при создании объекта формата пикселя то подсказка ничего не делает. Таблица 13-1 перечисляет подсказывающие константы, доступные для NSOpenGLPixelFormat класс и CGL.

Табличные 13-1  подсказки Сглаживания

Мультивыборка

Избыточная выборка

Альфа-смешивание

NSOpenGLPFAMultisample

NSOpenGLPFASupersample

NSOpenGLPFASampleAlpha

kCGLPFAMultisample

kCGLPFASupersample

kCGLPFASampleAlpha