GLSL font rendering OpenGL 3.x
Verfasst: 11.09.2013, 14:58
Aktuell habe ich meinen FreeType basierten Font-Renderer von OpenGL 2.x auf OpenGL 3.x+ umgestellt.
Klappt nun nach einigem hin und her auch, dennoch habe ich eine Frage bzgl. dem Fragment shader:
Bisher habe ich unter OpenGL 2.x im GLSL fragment shader folgenden Befehl verwendet um meine Fonts
zu rendern:
Damit habe ich das beste Ergebnis erziehlt. Die Schrift sieht gestochen scharf aus, auch beim Blending, wenn die
Schrift 3D-Objekte überlagert. Hier einmal ein Screenshot:

Mit diesem Befehl bekomme ich jedoch das Font Rendering nicht unter OpenGL 3.x lauffähig. Anstelle der Schrift,
werden hier nur die Sprites für die einzelnen Zeichen gerendert. Meine Vermutung geht daher, dass hier etwas mit
dem Alpha-Mapping nicht funktioniert.
Stelle ich den Befehl auf folgenden Befehl um:
Dann bekomme ich das Font-Rendering unter OpenGL 2.x und OpenGL 3.x lauffähig. Allerdings mit Einbußen in der
Qualität, die Schrift wirkt nun beim Blending nicht mehr so scharf:

Dieses Ergebnis habe sowohl unter OpenGL 2.x als auch 3.x. Als Blending Values verwende ich:
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD.
Kann mir jemand erklären warum der "alte" Befehl nicht mehr funktioniert und sieht jemand evtl. eine Möglichkeit, die
Qualität hoch zu schrauben?
Klappt nun nach einigem hin und her auch, dennoch habe ich eine Frage bzgl. dem Fragment shader:
Bisher habe ich unter OpenGL 2.x im GLSL fragment shader folgenden Befehl verwendet um meine Fonts
zu rendern:
Code: Alles auswählen
uniform sampler2D DiffuseMap; // Reference to sprite texture sampler
varying vec4 vColor; //This is the color from the vertex shader interpolated across the geometry per fragment.
varying vec2 vTexCoord0; //This is the texture coordinate from vertex shader
gl_FragColor = vec4(vColor.rgb, texture2D(DiffuseMap, vTexCoord0).a);
Schrift 3D-Objekte überlagert. Hier einmal ein Screenshot:
Mit diesem Befehl bekomme ich jedoch das Font Rendering nicht unter OpenGL 3.x lauffähig. Anstelle der Schrift,
werden hier nur die Sprites für die einzelnen Zeichen gerendert. Meine Vermutung geht daher, dass hier etwas mit
dem Alpha-Mapping nicht funktioniert.
Stelle ich den Befehl auf folgenden Befehl um:
Code: Alles auswählen
vec4 vTexColor = texture2D(DiffuseMap, vTexCoord0.st);
gl_FragColor = (vTexColor.r, vTexColor.r, vTexColor.r, vTexColor.r)*vColor;
Qualität, die Schrift wirkt nun beim Blending nicht mehr so scharf:
Dieses Ergebnis habe sowohl unter OpenGL 2.x als auch 3.x. Als Blending Values verwende ich:
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD.
Kann mir jemand erklären warum der "alte" Befehl nicht mehr funktioniert und sieht jemand evtl. eine Möglichkeit, die
Qualität hoch zu schrauben?