2017-02-21 4 views
1

Ich gerendert mehrere Symbole auf eine Textur Atlas, deren Hintergrund ist völlig transparent (die Textur Atlas Bild bekam alpha-Kanal, RGBA Formiat). Danach verwende ich den Texturatlas, um alle Symbole zu zeichnen, solange die Symbole auf der Textur erscheinen.OpenGL Textur Farbe wird nicht korrekt angezeigt, wenn gedrehte

Das Problem ist, wenn das gerenderte Symbol nicht gedreht wird, alles in Ordnung ist. Die Symbolfarbe scheint jedoch falsch zu sein, wenn sie gedreht wurde.

Wie die folgende Abbildung zeigt: die linke Pfeilsymbol nicht richtig gedreht und gerendert. Die Farbe am Rand des rechten Symbols, das gedreht wird, hat sich irgendwie geändert.

Was könnte das verursachen?

enter image description here

EDIT:

Als @BDL vorgeschlagen, änderte ich den Parameter auf:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

Aber einige der Symbole noch nicht zeigen, wie erwartet: Triangle Symbols

Das Dreiecksymbol auf der rechten Seite ist c orrect.

ich auch versucht:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

funktioniert auch nicht.

Soll ich die Farbe der Textur-Hintergrund ändern die gleiche wie die Symbole Grenze Pixelfarbe und dann GL_LINEAR als Texturfilter-Option?

+1

Ihre Anti-Aliasing-Technik – shan

+2

überprüfen, welche Farbe der transparenten Pixel im Quellbild sind? Schwarz? Weiß? – genpfault

+0

@genpfault Schwarz –

Antwort

0

Sie erhalten genau das Verhalten, das Sie erwarten würden, wenn lineare Interpolation verwendet wird. Jedes Fragment ist eine gewichtete Interpolation der vier umgebenden Texel. Entlang Grenzen erzeugt diese Interpolation halbtransparente Pixel, da sie zwischen opaken und transparenten Pixeln interpoliert. Die grauen Ränder ergeben sich aus dem Mischen dieser halbtransparenten Pixel mit dem Hintergrund.

Wenn Sie ein lineare Interpolation zu deaktivieren, um die Vergrößerung Filter der Textur ändern, indem Aufruf

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
+0

Edit Frage, wie Sie vorgeschlagen. Das Symbol hat sich geändert, aber nicht in einer befriedigenden Weise obwohl. –