我想繪製多邊形內的徑向漸變。我的舞臺是600x320
。我可以繪製一個漸變,但它'扭曲/拉伸'。目標是像光線會產生的漸變。OpenGL ES 2.0着色器 - 多邊形中的二維徑向漸變
u_lightPosition
通過爲相對值:{0.5, 0.5}
。
目前未使用的lightPositionAbsolute
作爲被傳入絕對值{300.0, 160.0}
。
我的片段着色器目前看起來是這樣的:
#ifdef GL_ES
precision lowp float;
#endif
varying vec4 v_fragmentColor;
uniform vec2 u_lightPosition;
uniform vec2 u_lightPositionAbsolute;
uniform vec4 u_outerColor;
uniform vec4 u_innerColor;
uniform float u_radius;
void main()
{
vec2 resolution = vec2(600,320);
vec2 position = (gl_FragCoord.xy/resolution.xy);
float distanceFromLight = length(position - u_lightPosition);
gl_FragColor = mix(u_outerColor, u_innerColor, distanceFromLight);
}
用圓圈多邊形這導致:
問題是,如果舞臺是二次的,它就會按預期工作。如果舞臺是長方形的,那麼漸變也會被拉伸,這對於光源不會發生。同樣在KickJS GLSL編輯器中,如果我去全屏。 – Alex 2012-07-26 15:28:27
KickJS示例中的圓圈邊緣有一些奇怪的閃爍現象。 – drewish 2014-08-17 21:18:08