Что делает мой выбор образцов GLFW на самом деле?

что делает установка этой переменной? Например, если я установлю 4, что это значит?

Я прочитал описание на glfw.org (см. здесь:GLFW руководство по окну) в разделе "подсказки, связанные с Фреймбуффером". В руководстве говорится: "GLFW_SAMPLES указывает желаемое количество образцов для использования для мультисамплинга. Ноль отключает мультисамплинг. GLFW_DONT_CARE означает, что приложение не имеет никаких предпочтений."

Я также прочитал описание multisampling в целом (см. здесь:Multisampling Шон Харгривз).

У меня есть приблизительное представление о том, что означает мультисэмплинг: при изменении размера и перерисовке изображения количество точек, используемых для перерисовки изображения, должно быть достаточно близко друг к другу, чтобы то, что мы видим, было точным представлением изображения. Та же идея появляется с цифровыми осциллографами-скажем, вы пробуете синусоидальный сигнал. Если частота дискретизации точно равна частоте (f) волны, то объем отображает постоянное напряжение, которое сильно отличается от входного сигнала, который вы надеялись увидеть. Чтобы избежать этого, Теорема Найквиста говорит нам, что мы должны выбирать со скоростью не менее 2f. Поэтому я вижу, как может возникнуть проблема в компьютерной графике, но я не знаю, какая именно функция

glfwWindowHint(GLFW_SAMPLES, 4); делает.

1 ответов


что делает установка этой переменной? Например, если я установлю 4, что это значит?

GLFW_SAMPLES используется для включения мультисэмплинга. Так что glfwWindowHint(GLFW_SAMPLES, 4) это способ включить 4x MSAA в вашем приложении.

4x MSAA означает, что каждый пиксель буфера окна состоит из 4 подмножеств, что означает, что каждый пиксель состоит из 4 пикселей, так сказать. Таким образом, буфер размером 200x100 пикселей фактически будет 800x400 пикселы.


если вы должны были создать дополнительный фреймбуфер, который в 4 раза больше, чем экран. Затем используйте его как образец текстуры с GL_LINEAR как фильтр, в основном достигнет того же результата. обратите внимание, что это относится только к 4x MSAA, как GL_LINEAR занимает лишь 4 пробы ближе к пиксель в вопрос.

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

более дешевой альтернативой с точки зрения производительности является использование FXAA. Это делается как этап постобработки и обычно происходит бесплатно. Разница в том, что MSAA отображает больший размер и downsamples до нужного размера, не теряя никакого качества. Где as FXAA просто усредняет пиксели как есть, в основном размывает изображение. FXAA обычно дает действительно достойный результат.

также ваш драйвер, скорее всего, включит его по умолчанию. Но если это не так, используйте glEnable(GL_MULTISAMPLE).


наконец, если вы еще этого не сделали, то я настоятельно рекомендую читать сглаживание LearnOpenGL учебник. Это дает действительно глубокое объяснение всего этого.