更改着色器中的颜色

时间:2014-08-22 03:51:22

标签: opengl opengl-es minecraft

我有一个Greder Shader用于Shaders Mod for Minecraft。我有final.fsh,它对这个资源包很有用:

" Craftboy Gray"

但是,我想修改着色器以绿色显示,类似于灰色。

" Craftboy Green"

我需要着色器的原因是修改资源包无法修改的所有颜色,并将其他播放器的皮肤更改为相同的比例,而无需手动执行。

以下是着色器的代码:

// Grayscale shader by daxnitro.
// Small edit by Edrem
// It makes the green brighter =D

uniform sampler2D sampler0;
uniform sampler2D sampler1;
uniform sampler2D sampler2;

uniform float near;
uniform float far;

float getBrightness(vec4 color);
float getDepth(vec2 coord);

void applyEffect() {
        float brightness = getBrightness(gl_FragColor);
        gl_FragColor = vec4(brightness, brightness, brightness, gl_FragColor[3]);
}

void main() {
    vec4 baseColor = texture2D(sampler0, gl_TexCoord[0].st);

        gl_FragColor = baseColor;

        float depth = getDepth(gl_TexCoord[0].st);

        if (gl_FragColor[3] == 0.0) {
                gl_FragColor = gl_Fog.color;
        }

        applyEffect(); 
}

float getBrightness(vec4 color) {
        return color[0] * 0.299f + color[1] * 0.587f + color[2] * 0.114f;
}

float getDepth(vec2 coord) {
        float depth = texture2D(sampler1, coord).x;
        float depth2 = texture2D(sampler2, coord).x;
        if (depth2 < 1.0) {
                depth = depth2;
        }

    depth = 2.0 * near * far / (far + near - (2.0 * depth - 1.0) * (far - near));

    return depth;
}

1 个答案:

答案 0 :(得分:2)

使其成为&#34;绿色规模&#34;而不是灰度,只将亮度写入输出的绿色分量:

void applyEffect() {
    float brightness = getBrightness(gl_FragColor);
    gl_FragColor = vec4(0.0, brightness, 0.0, gl_FragColor[3]);
}

如果您想要在整体亮绿色的同时获得更高的整体亮度,则可以在红色和蓝色组件中添加一些亮度。例如:

    gl_FragColor = vec4(brightness * vec3(0.5, 1.0, 0.5), gl_FragColor[3]);