150 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

2025-04-24 17:03:28 +08:00
CCEffect %{
techniques:
- passes:
- vert: vs
frag: fs
blendState:
targets:
- blend: true
rasterizerState:
cullMode: none
properties:
texture: { value: white }
alphaThreshold: { value: 0.5 }
# 自定义参数
dh1: {
value: 0.0,
editor: {
tooltip: "染色1",
range: [0.0, 255255255.0]
}
}
dh2: {
value: 0.0,
editor: {
tooltip: "染色2",
range: [0.0, 255255255.0]
}
}
alp1: {
value: 0.0,
editor: {
tooltip: "透明度1",
range: [0.0, 1.0]
}
}
alp2: {
value: 0.0,
editor: {
tooltip: "透明度2",
range: [0.0, 1.0]
}
}
}%
CCProgram vs %{
precision highp float;
#include <cc-global>
#include <cc-local>
in vec3 a_position;
in vec4 a_color;
out vec4 v_color;
#if USE_TEXTURE
in vec2 a_uv0;
out vec2 v_uv0;
#endif
void main () {
vec4 pos = vec4(a_position, 1);
#if CC_USE_MODEL
pos = cc_matViewProj * cc_matWorld * pos;
#else
pos = cc_matViewProj * pos;
#endif
#if USE_TEXTURE
v_uv0 = a_uv0;
#endif
v_color = a_color;
gl_Position = pos;
}
}%
CCProgram fs %{
precision highp float;
#include <alpha-test>
#include <texture>
in vec4 v_color;
#if USE_TEXTURE
in vec2 v_uv0;
uniform sampler2D texture;
#endif
uniform DH {
//染色1
float dh1;
//染色2
float dh2;
//透明度
float alp1;
//透明度
float alp2;
};
void main () {
vec4 o = vec4(1, 1, 1, 1);
#if USE_TEXTURE
CCTexture(texture, v_uv0, o);
#endif
o *= v_color;
ALPHA_TEST(o);
if(o.r>=0.5){
o.a=0.0;
}
if(o.g >= 0.5){
o.r = dh1 / 1000000.0 / 255.0;
o.g = mod(dh1, 1000000.0) / 1000.0 / 255.0;
o.b = mod(dh1, 1000.0) / 255.0;
o.a = alp1;
if (dh1 == 0.0) {
o.a = 0.0;
}
}
else if(o.b >= 0.5){
o.r = dh2 / 1000000.0 / 255.0;
o.g = mod(dh2, 1000000.0) / 1000.0 / 255.0;
o.b = mod(dh2, 1000.0) / 255.0;
o.a = alp2;
if (dh2 == 0.0) {
o.a = 0.0;
}
}
else {
o.a = 0.0;
}
gl_FragColor = o;
}
}%