我将metaball的概念应用到我正在制作的游戏中,以表明玩家选择了几艘战舰,例如http://prntscr.com/klgktf
但是,我的目标是保持此轮廓的厚度不变,而这不是我在当前代码中得到的。
我正在使用GLSL着色器执行此操作,然后将碎片的统一位置传递给碎片着色器(u_metaballs)。
顶点着色器:
#version 120
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
片段着色器:
#version 120
uniform vec2 u_metaballs[128];
void main() {
float intensity = 0;
for(int i = 0; i < 128 && u_metaballs[i].x != 0; i++){
float r = length(u_metaballs[i] - gl_FragCoord.xy);
intensity += 1 / r;
}
gl_FragColor = vec4(0, 0, 0, 0);
if(intensity > .2 && intensity < .21)
gl_FragColor = vec4(.5, 1, .7, .2);
}
我已经尝试过使用强度范围,甚至将1 / r更改为10000 /(r ^ 4),这虽然没有解决问题,但是(虽然没有任何意义)会有所帮助。
任何帮助或建议,将不胜感激。