Методы для сглаживания сцены
Искажение является отравой цифрового домена. В первые годы персонального компьютера зубчатые края и глыбовая графика были приняты пользователем просто, потому что не много могло быть сделано для исправления их. Теперь с более быстрыми аппаратными средствами и дисплеями более высокого разрешения, существует несколько сглаживающихся методов, которые могут сглаживать края для достижения более реалистической сцены.
Поддержки OpenGL, сглаживающиеся, который работает на уровне строк и многоугольников, а также на уровне всей сцены. В этой главе рассматриваются методы для всей сцены, сглаживающей (FSAA). Если Ваша точка потребностей приложения или строка, сглаживающаяся вместо полного сглаживания сцены, используйте созданный в точке OpenGL и функциях сглаживания строки. Они описаны в Разделе 3.4.2 в Спецификации OpenGL.
Три сглаживающихся метода в использовании сегодня мультивыбирают, избыточная выборка и смешивание альфа-канала:
Мультивыборка определяет метод для выборки пиксельного содержания в многократных расположениях для каждого пикселя. Если Вы хотите сглаживать края многоугольника, это - хороший метод, чтобы использовать.
Избыточная выборка представляет в намного более высоком разрешении, чем, что необходимо для дисплея. До рисования содержания к дисплею OpenGL масштабирует и фильтрует содержание к надлежащему разрешению. Когда Вы хотите сглаживать внутренние части текстуры в дополнение к краям многоугольника, это - хороший метод для использования.
Смешивание альфа-канала использует альфа-значение фрагмента, чтобы управлять, как смешать фрагмент с пиксельными значениями, которые уже находятся в кадровом буфере. Это - хороший метод для использования, когда Вы хотите гарантировать, что передний план и фоновые изображения составляются гладко.
Расширение ARB_multisample определяет спецификацию для полного сглаживания сцены. Это описывает выборка альфа-канала и мультивыборка. Спецификация в частности не упоминает избыточную выборку, но ее формулировка не устраняет избыточную выборку. Методы сглаживания, которые доступны, зависят от аппаратных средств, и фактическая реализация зависит от поставщика. Некоторое сглаживание поддержки видеокарт с помощью смеси мультивыборки и избыточной выборки. Методология, используемая для выбора выборок, может варьироваться также. Ваш лучший подход должен запросить средство рендеринга для обнаружения точно, что поддерживается. OpenGL позволяет Вам обеспечить подсказку для средства рендеринга, относительно которого сглаживания метода Вы предпочитаете. Подсказки доступны, поскольку средство рендеринга приписывает это, Вы предоставляете при создании объекта формата пикселя.
Меньшее подмножество средств рендеринга поддерживает EXT_framebuffer_blit и расширения EXT_framebuffer_multisample. Когда мультивыбранный renderbuffer разрешен к единственному визуализуемому цвету на пиксель, эти расширения позволяют Вашему приложению создавать мультивыбранные внеэкранные объекты кадрового буфера, представлять подробные сцены им, с точным управлением.
Инструкции
Помните следующий при установке полного сглаживания сцены:
Несмотря на то, что система может иметь достаточно VRAM для размещения мультидемонстрационного буфера, большой буфер может влиять на возможность OpenGL поддержать должным образом рабочий набор текстуры. Следует иметь в виду, что буферы, связанные с контекстом рендеринга — глубина и шаблон — увеличиваются в размере фактором, равным числу выборок на пиксель.
Драйвер OpenGL выделяет память, необходимую для мультидемонстрационного буфера; Ваше приложение не должно выделять эту память.
Любой алгоритм сглаживания, воздействующий на всю сцену, требует дополнительных вычислительных ресурсов. Существует компромисс между производительностью и качеством. По этой причине можно хотеть обеспечить пользовательский интерфейс, позволяющий пользователю включать и отключать FSAA или выбирать уровень качества для сглаживания.
Команды
glEnable(GL_MULTISAMPLE)
иglDisable(GL_MULTISAMPLE)
проигнорированы на некоторых аппаратных средствах, потому что некоторым видеокартам включили функцию все время. Это не означает, что Вы не должны вызывать эти команды, потому что Вам, конечно, будут нужны они на аппаратных средствах, не игнорирующих их.Подсказка относительно варианта выборки Вас хочет, предложение, не команда. Не вся поддержка оборудования все типы сглаживания. Другая аппаратная мультивыборка смесей с методами избыточной выборки. Драйвер диктует тип сглаживания, это фактически используется в Вашем приложении.
Лучший способ узнать, какие демонстрационные режимы поддерживаются, состоит в том, чтобы вызвать функцию CGL
CGLDescribeRenderer
со свойством средства рендерингаkCGLRPSampleModes
илиkCGLRPSampleAlpha
. Можно также определить, сколько выборок средство рендеринга поддерживает путем вызоваCGLDescribeRenderer
со свойством средства рендерингаkCGLRPMaxSamples
.
Общий подход
Общий подход к установке полного сглаживания сцены следующие:
Проверьте для наблюдения то, что поддерживается. Не все средства рендеринга поддерживают мультидемонстрационное расширение ARB, таким образом, необходимо проверить на эту функциональность (см. Функциональность Обнаружения).
Для обнаружения, какое сглаживание определенное средство рендеринга поддерживает вызовите функцию
CGLDescribeRenderer
. Предоставьте свойство средства рендерингаkCGLRPSampleModes
узнать ли мультивыборка поддержек средства рендеринга и избыточная выборка. ПредоставлениеkCGLRPSampleAlpha
видеть, поддерживает ли средство рендеринга альфа-выборку.Можно принять решение исключить неподдерживаемые аппаратные средства из поиска формата пикселя путем указания только аппаратных средств, поддерживающих мультидемонстрационное сглаживание. Следует иметь в виду, что при исключении неподдерживаемых аппаратных средств неподдерживаемые дисплеи ничего не представят. При включении неподдерживаемых аппаратных средств OpenGL использует нормальный искаженный рендеринг для неподдерживаемых дисплеев и мультивыбранный рендеринг к поддерживаемым дисплеям.
Включайте эти буферные атрибуты в массив атрибутов:
Надлежащий демонстрационный буферный постоянный атрибут (
NSOpenGLPFASampleBuffers
илиkCGLPFASampleBuffers
) вместе с числом мультидемонстрационных буферов. В это время спецификация позволяет только один мультидемонстрационный буфер.Надлежащие постоянные выборки (
NSOpenGLPFASamples
илиkCGLPFASamples
) вместе с числом выборок на пиксель. Можно предоставить 2, 4, 6, или больше в зависимости от какой поддержки средства рендеринга и сумма доступного VRAM. Значение, которое Вы предоставляете, влияет на качество, использование памяти и скорость работы мультивыборки. Для самой быстрой производительности, и использовать наименьшее количество суммы видеопамяти, указывают 2 выборки. При необходимости в большем качестве укажите 4 или больше.Никакой атрибут восстановления (
NSOpenGLPFANoRecovery
илиkCGLPFANoRecovery
). Несмотря на то, что включение этого атрибута не обязательно, рекомендуется препятствовать тому, чтобы OpenGL использовал нейтрализацию программного обеспечения в качестве средства рендеринга. Мультивыбранная производительность сглаживания является медленной в средстве рендеринга программного обеспечения.
Дополнительно обеспечьте подсказку для типа сглаживания, Вы хотите — мультивыборка, избыточная выборка или альфа-выборка. Посмотрите Вывод подсказок для Определенного Метода Сглаживания.
Позвольте мультивыбрать со следующей командой:
glEnable(GL_MULTISAMPLE)
;Независимо от включенного состояния OpenGL всегда использует мультидемонстрационный буфер при предоставлении надлежащих буферных атрибутов при установке объекта формата пикселя. Если Вы не предоставили надлежащие атрибуты, разрешение мультивыборки не имеет никакого эффекта.
Когда мультивыборка отключена, все значения покрытия установлены в
1
, который дает появление рендеринга без мультивыборки.Все время некоторая листовая мультивыборка аппаратного обеспечения машинной графики включила. Однако не полагайтесь на аппаратные средства для имения включенной мультивыборки; использовать
glEnable
программно включать эту функцию.Дополнительно обеспечьте подсказки для алгоритма рендеринга. Вы выполняете этот дополнительный шаг, только если Вы хотите, чтобы 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.
Мультивыборка | Избыточная выборка | Альфа-смешивание |
---|---|---|
|
|
|
|
|
|