Sampling auf den Texelzentren liefert keine korrekten Ergebnisse, OpenGL, C ++

9

Vor nicht allzu langer Zeit hatte ich ein Problem mit der Anzeige einer Textur, da ich Kanten von Texeln als Texturkoordinaten anstelle von Texelzentren verwendete. Dies in Kombination mit dem linearen Mischen ergab ein glattes Ergebnis von Farben anstelle von reinen Farben, die durch eine Textur gegeben sind.

Dank der Ratschläge, die ich hier erhielt, dachte ich, dass mein Problem gelöst ist, als ich anfing Textzentren als Koordinaten zu verwenden, aber es funktionierte nur in einem Fall und ich habe keine Ahnung warum nur in diesem einen Fall.

Wieder werde ich ein paar Bilder zeigen.

Dies ist eine Textur, die ich verwende (32x32 Pixel) mit einer Grenze von 2 Pixel:

Mein ganzes Objekt, das gezeichnet wird, besteht aus 9 Quads, aber sie verwenden nur eine Textur (die ich zeigte). Einer von ihnen wird als Erklärung für mein Problem dienen:

Ich denke, es ist gut sichtbar, dass die Farben dieses Quads nicht entsprechend der Textur richtig eingestellt sind.

Es sieht nach einem Problem mit der Überblendung aus, aber zum Setzen von Texturkoordinaten habe ich Texelzentren wie folgt verwendet:

%Vor%

Zur Klarstellung:

m_borderWidth = 2

maxTexCoordBorderX = maxTexCoordBorderY = 2/32 = 0,0625

texelCentersOffset = 1/64 = 0,015625

Könnte mir jemand sagen, was falsch an dem ist, was ich geschrieben habe?

EDIT1:

Hier sind Einstellungen für meine Textur:

%Vor%

Wenn ich von GL_LINEAR zu GL_NEAREST übergehe, funktioniert es richtig, also ist es offensichtlich ein Problem mit der Mischung, aber ich kann immer noch nicht herausfinden, warum es falsch ist.

EDIT2:

Wenn ich die Höhe des Quads so erhöhe, dass es gleich oder größer als die Höhe der Textur ist, funktioniert es ohne Änderung der Texturkoordinaten.

    
Piotr Chojnacki 18.12.2012, 15:15
quelle

1 Antwort

1

Es scheint mir, dass wenn Sie die Quad-Größe weniger als die Texturgröße einstellen. Es muss die Textur mit einer Mipmap abtasten.

Mipmaps werden durch Mittelwertbildung von 4 Texel-Blöcken erstellt. Wenn Sie also die Mipmap abtasten, erhalten Sie Informationen von mehr als einem Texel. Wenn dein Quad also kleiner als die Textur ist, muss es eine Mipmap probieren und du bekommst Textur bluten. Schalten Sie das Mipmapping aus und ich denke, es wird verschwinden.

    
Tocs 21.12.2012, 18:55
quelle

Tags und Links