我正在使用GLSL着色器制作游戏
我将Go与库Pixel一起使用,这是一个2D游戏,没有“相机”(我建议人们使用第二台相机来实现这一目标)
我当前的着色器只是一个基本的灰度着色器
#version 330 core
in vec2 vTexCoords;
out vec4 fragColor;
uniform vec4 uTexBounds;
uniform sampler2D uTexture;
void main() {
// Get our current screen coordinate
vec2 t = (vTexCoords - uTexBounds.xy) / uTexBounds.zw;
// Sum our 3 color channels
float sum = texture(uTexture, t).r;
sum += texture(uTexture, t).g;
sum += texture(uTexture, t).b;
// Divide by 3, and set the output to the result
vec4 color = vec4( sum/3, sum/3, sum/3, 1.0);
fragColor = color;
}
我想取出一个着色器圆圈,以显示物体的颜色,就像光在它们上面照亮一样。
这是我要实现的目标的一个示例
我真的不知道该搜索什么来找到一个sharttoy示例或执行此操作的东西,但是我之前已经看过类似的东西,所以我很确定这是可能的。
重述;我基本上只想删除着色器的一部分。
不确定使用着色器是否是解决此问题的最佳方法,如果还有其他方法,请告诉我,我将重提问题。
答案 0 :(得分:0)
您可以轻松地将其扩展为使用任意位置作为“灯光”。
否则,返回其灰度。
vec2 displacement = t - light_location;
float distanceSq = (displacement.x * displacement.x + displacement.y * displacement.y)
float radiusSq = radius * radius;
if(distanceSq < radiusSq) {
fragColor = texture(uTexture);
} else {
float sum = texture(uTexture).r;
sum += texture(uTexture).g;
sum += texture(uTexture).b;
float grey = sum / 3.0f;
fragColor = vec4(grey, grey, grey, 1.0f);
}