feat:新增文件内容
This commit is contained in:
11
src/shaders/base.vert
Normal file
11
src/shaders/base.vert
Normal 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);
|
||||
}
|
||||
3
src/shaders/modules/alpha.glsl
Normal file
3
src/shaders/modules/alpha.glsl
Normal file
@@ -0,0 +1,3 @@
|
||||
float applyAlpha(float value, float intensity) {
|
||||
return clamp(value * intensity, 0.0, 1.0);
|
||||
}
|
||||
18
src/shaders/modules/noise.glsl
Normal file
18
src/shaders/modules/noise.glsl
Normal 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;
|
||||
}
|
||||
4
src/shaders/modules/uv_scroll.glsl
Normal file
4
src/shaders/modules/uv_scroll.glsl
Normal file
@@ -0,0 +1,4 @@
|
||||
vec2 scrollUV(vec2 uv, float time, float speed) {
|
||||
uv.y += time * speed * 0.12;
|
||||
return uv;
|
||||
}
|
||||
22
src/shaders/templates/distortion.ts
Normal file
22
src/shaders/templates/distortion.ts
Normal 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;
|
||||
21
src/shaders/templates/fire.ts
Normal file
21
src/shaders/templates/fire.ts
Normal 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;
|
||||
7
src/shaders/templates/index.ts
Normal file
7
src/shaders/templates/index.ts
Normal 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]));
|
||||
21
src/shaders/templates/ripple.ts
Normal file
21
src/shaders/templates/ripple.ts
Normal 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;
|
||||
12
src/shaders/templates/types.ts
Normal file
12
src/shaders/templates/types.ts
Normal 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;
|
||||
};
|
||||
Reference in New Issue
Block a user