2017-03-17 37 views
5

Do czego służy ustawienie tej zmiennej? Na przykład, jeśli ustawię go na 4, co to znaczy?Co właściwie robi mój wybór GLFW_SAMPLES?

Przeczytałem opis na glfw.org (patrz tutaj: GLFW Window Guide) w sekcji "Wskazówki dotyczące framebufferów". W podręczniku napisano "GLFW_SAMPLES określa wymaganą liczbę próbek do użycia przy multisamplingu, zero wyłącza multisampling, GLFW_DONT_CARE oznacza, że ​​aplikacja nie ma preferencji."

Przeczytałem również opis ogólnego próbkowania (patrz tutaj: Multisampling Shawna Hargreavesa).

Mam ogólne pojęcie o tym, co oznacza multisampling: podczas zmiany rozmiaru i przerysowywania obrazu liczba punktów używanych do przerysowania obrazu powinna być na tyle blisko siebie, że widzimy dokładną reprezentację obrazu. Ta sama idea pojawia się w cyfrowych oscyloskopach - powiedzmy, że próbujesz sygnału sinusoidalnego. Jeśli częstotliwość próbkowania akurat jest dokładnie równa częstotliwości (f) fali, zakres wyświetla stałe napięcie, które jest znacznie inne niż sygnał wejściowy, który masz nadzieję zobaczyć. Aby tego uniknąć, twierdzenie Nyquista mówi nam, że powinniśmy próbkować w tempie co najmniej 2f. Widzę więc, jak może powstać problem w grafice komputerowej, ale nie wiem, co dokładnie robi ta funkcja.

Odpowiedz

7

Do czego służy ustawienie tej zmiennej? Na przykład, jeśli ustawię go na 4, co to znaczy?

służy do włączania funkcji multisampling. Tak więc glfwWindowHint(GLFW_SAMPLES, 4) jest sposobem na włączenie 4x MSAA w aplikacji.

4x MSAA oznacza, że ​​każdy piksel bufora okna składa się z 4 podpróbek, co oznacza, że ​​każdy piksel składa się z 4 pikseli. Zatem bufor o rozmiarze 200x100 pikseli będzie faktycznie 800x400 pikseli.


Jeśli chcesz utworzyć dodatkowy bufor ramki, który jest 4 razy większy niż ekran. Następnie użycie go jako próbnika tekstur z filtrem GL_LINEAR zasadniczo da taki sam wynik. Należy zauważyć, że dotyczy to tylko 4x MSAA, ponieważ tylko GL_LINEAR pobiera 4 próbki najbliższe pikselowi, o którym mowa.

Jeśli chodzi o wygładzanie, to używanie MSAA to naprawdę skuteczne, ale drogie rozwiązanie. Jeśli chcesz bardzo czysty i dobrze wyglądający wynik, to zdecydowanie jest to droga. 4x MSAA jest zwykle wybierany, ponieważ zachowuje równowagę pomiędzy jakością i wydajnością.

Tańszą alternatywą pod względem wydajności jest użycie FXAA. Czynność ta jest wykonywana jako etap przetwarzania końcowego i zwykle odbywa się bezpłatnie. Różnica polega na tym, że MSAA renderuje się w większym rozmiarze i poddaje próbkowaniu do pożądanego rozmiaru, nie tracąc żadnej jakości. Tam, gdzie FXAA po prostu uśrednia piksele tak jak jest, w zasadzie blured obraz. FXAA zwykle daje naprawdę przyzwoity wynik.

Również Twój sterownik najprawdopodobniej domyślnie go włączy. Ale jeśli nie, to użyj glEnable(GL_MULTISAMPLE).


Wreszcie, jeśli jeszcze go nie masz, to bardzo polecam czytanie LearnOpenGL's Anti-Aliasing samouczek. Daje to naprawdę dogłębne wyjaśnienie tego wszystkiego.

Powiązane problemy