Сглаживание всей сцены после рестеризации - PullRequest
2 голосов
/ 10 августа 2010

Я столкнулся с проблемой при компиляции кода openGl.Дело в том, что я хочу добиться полного сглаживания сцены и не знаю как.Я включил принудительное сглаживание с панели управления Nvidia, и это было то, что я действительно хотел получить.Я делаю это сейчас с GL_POLYGON_SMOOTH.Очевидно, что это не эффективно и красиво.Вот вопросы

1) Должен ли я использовать мультисэмплинг?2) Где в конвейере openGl смешивает цвета для сглаживания?3) Какие существуют альтернативы, кроме GL _ * _ SMOOTH и мультисэмплинга?

Ответы [ 2 ]

5 голосов
/ 10 августа 2010

GL_POLYGON_SMOOTH - это , а не метод для выполнения полноэкранного АА (FSAA).

Не уверен, что вы подразумеваете под "неэффективным" в этом контексте, но он определенно не очень хорошо выглядит из-за его тенденции смешиваться в середине ячеек (по краям треугольника).

Теперь относительно FSAA и ваших вопросов:

  1. Мультисэмплинг (он же MSAA) сегодня является стандартным способом выполнения FSAA. Обычной альтернативой является суперсэмплинг (SSAA), который заключается в рендеринге с более высоким разрешением и уменьшении в конце. Это намного дороже.
  2. В спецификации сказано, что логически GL хранит буфер семплов (в 4 раза больше пиксельного буфера, для 4xMSAA) и пиксельный буфер (всего в 5 раз больше памяти), и в каждом семпле записывает в семпл buffer, обновляет буфер пикселей значением resolved из текущих 4 выборок в буфере выборок (кстати, это не называется смешиванием. Смешивание - это то, что происходит во время записи в буфер выборок, контролируется glBlendFunc и др.). На практике это не то, что происходит в оборудовании. Как правило, вы записываете только в пример буфера (а аппаратное обеспечение обычно пытается сжать данные), и когда придет время его использовать, реализация GL разрешит полный буфер сразу, прежде чем произойдет использование. Это также помогает, если вы на самом деле используете буфер сэмплов напрямую (тогда вообще не нужно разрешать).
  3. Я покрыл SSAA и его стоимость. Последний метод называется морфологическим сглаживанием (MLAA) и активно исследуется. Идея состоит в том, чтобы сделать проход после обработки полностью визуализированного изображения и сглаживания, которое выглядит как острые края. Суть в том, что он не реализован самим GL, вы должны кодировать его как этап постобработки. Я включил это для справки, но это может стоить довольно много .
3 голосов
/ 11 августа 2010

Я написал пост об этом здесь: Получение сглаженных, больших точек в OpenGL

Вы должны указать WGL_SAMPLE_BUFFERS и WGL_SAMPLES (или префикс GLX для XOrg / GLX) перед созданием OpenGLконтекст, при выборе пиксельного формата или визуального.

В Windows убедитесь, что вы используете wglChoosePixelFormatARB(), если вы хотите формат пикселей с расширенными чертами, НЕ ChoosePixelFormat() из GDI / GDI +.wglChoosePixelFormatARB должен запрашиваться с помощью wglGetProcAddress из драйвера ICD, поэтому вам необходимо заранее создать фиктивный контекст OpenGL.Указатели на функции WGL действительны даже после разрушения контекста OpenGL.

WGL_SAMPLE_BUFFERS - логическое значение (1 или 0), которое включает мультисэмплинг.WGL_SAMPLES - это количество буферов, которое вы хотите.Обычно 2,4 или 8.

...