我正在使用由Hiero生成的BitmapFont。我遵循這個偉大的指南https://github.com/libgdx/libgdx/wiki/Distance-field-fonts正確使用距離場。 我也使用指南中提供的着色器。一切都很好。使用着色器和使用距離字段概述字體
接近尾聲時,在指南中提到,在距離場反鋸齒的頂部,應該很容易從所提供的着色器中爲字體添加輪廓。它與調整距離參數有關。我確信知道如何處理着色器的人很容易。但我不知道。
這裏是斷枝代碼
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D u_texture;
varying vec4 v_color;
varying vec2 v_texCoord;
const float smoothing = 1.0/16.0;
void main() {
float distance = texture2D(u_texture, v_texCoord).a;
float alpha = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);
gl_FragColor = vec4(v_color.rgb, alpha);
}
這裏是VERT代碼:
uniform mat4 u_projTrans;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
attribute vec4 a_color;
varying vec4 v_color;
varying vec2 v_texCoord;
void main() {
gl_Position = u_projTrans * a_position;
v_texCoord = a_texCoord0;
v_color = a_color;
}
從這裏如何使用着色器添加的輪廓?
嗨@ Tenfour04。謝謝你的回答,並且我很抱歉回答這麼晚。看來shaderProgram.setUniformf(「u_outlineColor」,myOutlineColor);使用Vector2作爲值。值是否對應於(RGB,ALPHA)?如何選擇純紅色的例子? – Don 2014-10-06 12:19:55
'setUniformf'有許多不同的重載,而不僅僅是一個Vector2。在這種情況下,我們想要傳遞四個浮點數,因爲我們將'u_outlineColor'聲明爲'vec4'。你可以像這樣傳入四個浮點數:'setUniformf(「u_outlineColor」,1f,0f,0f,1f);'這四個數字是顏色的RGBA分量,歸一化。或者你可以傳入一個'com.badlogic.gdx.graphics.Color'的實例,這就是我希望'myOutlineColor'的實例。所以對於紅色,你會'myOutlineColor.set(1,0,0,1); shaderProgram.setUniformf(「u_outlineColor」,myOutlineColor);' – Tenfour04 2014-10-06 12:35:19
非常感謝您的出色答案。祝你有美好的一天 – Don 2014-10-06 12:40:44