你好,感谢你的回复,我看了你的effect,你的意思是要这样对吧?
CCProgram sprite-fs %{
precision highp float;
#include <builtin/internal/embedded-alpha>
#include <builtin/internal/alpha-test>
//local uniforms
#include <builtin/uniforms/cc-local>
//global uniforms
#include <builtin/uniforms/cc-global>
#include <legacy/output>
#include <legacy/fog-fs>
in vec4 color;
// 这里这两个注释掉
// in vec2 v_uv;
// in vec3 v_position;
uniform sampler2D mainTexture;
uniform Constant {
vec4 mainColor;
float waveSpeed;
float waveScale;
float rainbowSpeed;
float saturation;
float brightness;
};
#if USE_TEXTURE
// 然后再编辑器里勾选USE TEXTURE,使用这里定义的uv0
in vec2 uv0;
#pragma builtin(local)
layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture;
#endif
// 彩虹色彩函数
vec3 rainbow(float t) {
float hue = mod(t, 1.0);
float r, g, b;
if (hue < 1.0/6.0) {
r = 1.0; g = hue * 6.0; b = 0.0;
} else if (hue < 2.0/6.0) {
r = (2.0/6.0 - hue) * 6.0; g = 1.0; b = 0.0;
} else if (hue < 3.0/6.0) {
r = 0.0; g = 1.0; b = (hue - 2.0/6.0) * 6.0;
} else if (hue < 4.0/6.0) {
r = 0.0; g = (4.0/6.0 - hue) * 6.0; b = 1.0;
} else if (hue < 5.0/6.0) {
r = (hue - 4.0/6.0) * 6.0; g = 0.0; b = 1.0;
} else {
r = 1.0; g = 0.0; b = (1.0 - hue) * 6.0;
}
return vec3(r, g, b);
}
// 水波纹函数
float wave(vec2 uv, float time) {
float wave1 = sin(uv.x * waveScale + time * waveSpeed) * 0.5 + 0.5;
float wave2 = sin(uv.y * waveScale * 0.7 + time * waveSpeed * 1.3) * 0.5 + 0.5;
float wave3 = sin((uv.x + uv.y) * waveScale * 0.5 + time * waveSpeed * 0.8) * 0.5 + 0.5;
return (wave1 + wave2 + wave3) / 3.0;
}
vec4 frag () {
// 获取原始纹理颜色
vec4 texColor = texture(mainTexture, uv0);
// 使用内置的cc_time获取时间
float time = cc_time.x;
// 计算水波纹效果
float waveValue = wave(uv0, time);
// 计算彩虹色彩
float rainbowTime = time * rainbowSpeed;
vec3 rainbowColor = rainbow(waveValue + rainbowTime * 0.1);
// 混合原始纹理和彩虹效果
vec3 finalColor = mix(texColor.rgb, rainbowColor, waveValue * 0.8);
// 应用饱和度和亮度调整
float gray2 = dot(finalColor, vec3(0.299, 0.587, 0.114));
finalColor = mix(vec3(gray2), finalColor, saturation);
finalColor *= brightness;
vec4 col = vec4(finalColor, texColor.a) * mainColor;
//CC_APPLY_FOG(col, v_position);
return CCFragOutput(col);
}
}%
是这个意思吧?我吧你的下载下来试了,网页上还是显示不出来,能不能稍微详细点呢?感谢