2016-06-25 10 views
3

Was passiert, wenn eine Interpolation des nächsten Nachbarn auftritt, wo das Pixel, für das die nächste Nachbarinterpolation in der Textur berechnet wird, die gleiche Entfernung von zwei benachbarten Pixeln aufweist Pixel fällt gleich weit von den zwei Pixeln ab, die es im Falle einer Vergrößerung korrekt für ein neues Pixel zu interpolieren versucht.Was passiert bei der nächsten Nachbarinterpolation OpenGL Pixelzentrum

Nimmt OpenGL die zwei Pixel und interpoliert eine Farbe aus der Textur, indem sie einen Durchschnittswert aus den beiden bei gleicher Länge nimmt oder etwas anderes passiert?

+0

Ihre Frage ist ein Widerspruch. Wenn Sie 'GL_NEAREST' verwenden, ist der Wert des Pixels der nächste. Es wird * nicht * interpoliert; das ist es, was 'GL_NEAREST' * bedeutet *. –

+0

okay gut, ich habe die falschen Wörter benutzt, aber die Frage bleibt immer noch, was passiert, wenn es zwei nächste Pixel gibt, die beide den gleichen Abstand vom Pixel haben, der von den umliegenden Pixeln gefüllt werden soll? – looking4answers

+0

Ich denke, die Frage ist, was genau passiert in Grenzfällen: Unter der Annahme einer Textur mit 2 Texelbreiten wird das Texel für die Nachschlagekoordinate von 0,5 ausgewählt. – BDL

Antwort

4

Die spec ist sehr klar darüber, wie Texel aus einer Textur ausgewählt werden koordinieren:

Minifizierung

Abschnitt 8.14 des Verkleinerungs Verhalten gibt (I überspringen hier eine Menge Dinge in Bezug auf Wrap-Modi usw. und erkläre den 2D Fall):

Sei [s (x, y), t (x, y)] die Texturkoordinaten an der Bildschirmposition (x, y). Nun definieren wir u (x, y) = s (x, y) * texture_width und v (x, y) = t (x, y) * texture_height. Im Falle der nächsten Nachbarinterpolation wird das Texel durch die ganzzahligen Koordinaten (i, j) gegeben, wobei i = Boden (u (x, y)) und j = Boden (v (x, y)).

sie ein Beispiel tun: Unter der Annahme, wir eine Textur der Größe 2x1 und eine Lookup-Position von [0,5, 0,5] haben. In diesem Fall gilt u (x, y) = 0,5 * 2 = 1 und v (x, y) = 0,5 * 1 = 0,5. Jetzt erhalten wir i = floor (1) = 1 und j = floor (0.5) = 0. Das Ergebnis ist also die Farbe des rechten Texels.

Vergrößerung

Abschnitt 8.15 stellt die Vergrößerung der genau wie die Verkleinerungs verhält.