feat:新增文件内容

This commit is contained in:
Daniel
2026-04-01 17:28:39 +08:00
commit 0bf1299908
33 changed files with 1703 additions and 0 deletions

11
src/shaders/base.vert Normal file
View File

@@ -0,0 +1,11 @@
precision mediump float;
attribute vec3 position;
attribute vec2 uv;
varying vec2 v_uv;
void main() {
v_uv = uv;
gl_Position = vec4(position, 1.0);
}

View File

@@ -0,0 +1,3 @@
float applyAlpha(float value, float intensity) {
return clamp(value * intensity, 0.0, 1.0);
}

View File

@@ -0,0 +1,18 @@
float hash21(vec2 p) {
p = fract(p * vec2(123.34, 456.21));
p += dot(p, p + 78.233);
return fract(p.x * p.y);
}
float noise2d(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
float a = hash21(i);
float b = hash21(i + vec2(1.0, 0.0));
float c = hash21(i + vec2(0.0, 1.0));
float d = hash21(i + vec2(1.0, 1.0));
vec2 u = f * f * (3.0 - 2.0 * f);
return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
}

View File

@@ -0,0 +1,4 @@
vec2 scrollUV(vec2 uv, float time, float speed) {
uv.y += time * speed * 0.12;
return uv;
}

View File

@@ -0,0 +1,22 @@
import type { EffectTemplate } from "./types";
const distortionTemplate: EffectTemplate = {
name: "distortion",
modules: ["noise", "alpha"],
defaultParams: {
speed: 1.2,
scale: 5.0,
intensity: 1.0
},
fragmentLogic: `
vec2 uv = v_uv;
float offset = noise2d(uv * u_scale + u_time * u_speed) - 0.5;
uv += vec2(offset * 0.18, offset * 0.1);
float shade = noise2d(uv * (u_scale * 0.7) + 11.3);
vec3 color = mix(vec3(0.05, 0.05, 0.08), vec3(0.8, 0.95, 1.0), shade);
float alpha = applyAlpha(0.65 + shade * 0.35, u_intensity);
gl_FragColor = vec4(color, alpha);
`
};
export default distortionTemplate;

View File

@@ -0,0 +1,21 @@
import type { EffectTemplate } from "./types";
const fireTemplate: EffectTemplate = {
name: "fire",
modules: ["noise", "uv_scroll", "alpha"],
defaultParams: {
speed: 1.0,
scale: 3.0,
intensity: 1.0
},
fragmentLogic: `
vec2 uv = scrollUV(v_uv, u_time, u_speed);
float n = noise2d(uv * u_scale + vec2(0.0, u_time * 0.6));
float flame = smoothstep(0.2, 1.0, n + (1.0 - uv.y) * 0.8);
vec3 color = mix(vec3(0.85, 0.1, 0.02), vec3(1.0, 0.75, 0.08), flame);
float alpha = applyAlpha(flame, u_intensity);
gl_FragColor = vec4(color, alpha);
`
};
export default fireTemplate;

View File

@@ -0,0 +1,7 @@
import distortion from "./distortion";
import fire from "./fire";
import ripple from "./ripple";
export const templates = [fire, ripple, distortion];
export const templateMap = new Map(templates.map((t) => [t.name, t]));

View File

@@ -0,0 +1,21 @@
import type { EffectTemplate } from "./types";
const rippleTemplate: EffectTemplate = {
name: "ripple",
modules: ["uv_scroll", "alpha"],
defaultParams: {
speed: 0.8,
scale: 8.0,
intensity: 0.85
},
fragmentLogic: `
vec2 uv = v_uv - 0.5;
float dist = length(uv);
float wave = sin((dist * u_scale - u_time * u_speed * 3.0) * 6.2831) * 0.5 + 0.5;
vec3 color = mix(vec3(0.05, 0.2, 0.5), vec3(0.4, 0.85, 1.0), wave);
float alpha = applyAlpha(1.0 - dist * 1.6, u_intensity);
gl_FragColor = vec4(color, alpha);
`
};
export default rippleTemplate;

View File

@@ -0,0 +1,12 @@
export type EffectParams = {
speed: number;
scale: number;
intensity: number;
};
export type EffectTemplate = {
name: string;
modules: Array<"noise" | "uv_scroll" | "alpha">;
defaultParams: EffectParams;
fragmentLogic: string;
};