彩虹圆环动画

🎯 提示词

PROMPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
使用 Three.js 实现【彩虹圆环动画】,具体要求:

【核心特效】
- 极坐标转换实现环形效果
- 动态颜色渐变动画
- 多层圆环叠加效果

【场景与光照】
- 透明背景
- 无光源(纯着色器效果)
- 平面几何体

【交互与控制】
- OrbitControls 视角控制
- 自动播放动画

【技术要求】
- Three.js 版本
- 自定义 ShaderMaterial

📖 效果拆解

层次 视觉效果 技术实现
基础 平面几何体 PlaneGeometry
核心特效 极坐标转换 atan + length
增强细节 彩虹颜色渐变 分段颜色混合
动画效果 圆环扫描动画 时间驱动的颜色偏移

🔧 核心技术点

1. 极坐标转换

将笛卡尔坐标转换为极坐标:

GLSL
1
2
3
4
5
6
7
void main() {
    vec2 p = (vUv - 0.5) * 2.0;  // 归一化到 [-1, 1]
    float tau = PI * 2.0;
    float a = atan(p.x, p.y);     // 计算角度
    float r = length(p) * 0.75;   // 计算半径并缩放
    vec2 uv = vec2(a / tau, r);   // 转换为极坐标
}

2. 彩虹颜色生成

基于角度生成彩虹色:

GLSL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 获取颜色 - 根据角度计算彩虹色
float xCol = (uv.x - (iTime / 3.0)) * 3.0;
xCol = mod(xCol, 3.0);
vec3 horColour = vec3(0.25, 0.25, 0.25);

if (xCol < 1.0) {
    horColour.r += 1.0 - xCol;
    horColour.g += xCol;
} else if (xCol < 2.0) {
    xCol -= 1.0;
    horColour.g += 1.0 - xCol;
    horColour.b += xCol;
} else {
    xCol -= 2.0;
    horColour.b += 1.0 - xCol;
    horColour.r += xCol;
}

3. 环形光束绘制

创建动态环形光束效果:

GLSL
1
2
3
4
5
6
// 绘制彩色光束
uv = (2.0 * uv) - 1.0;
float beamWidth = (0.7 + 0.5 * cos(uv.x * 10.0 * tau * 0.15 * 
    clamp(floor(5.0 + 10.0 * cos(iTime)), 0.0, 10.0))) * abs(1.0 / (30.0 * uv.y));
vec3 horBeam = vec3(beamWidth); 
gl_FragColor = vec4(((horBeam) * horColour), 1.0);

💡 调试与优化

问题类型 表现形式 解决方案
着色器报错 变量未定义 检查 PI 常量定义
颜色异常 颜色过渡不自然 调整颜色混合逻辑
性能问题 帧率下降 减少计算复杂度
圆环变形 边缘锯齿 增加几何体细分

🚀 扩展思路

变体效果 核心改动 难度
多层圆环 添加多个环形图层
交互控制 鼠标控制圆环大小 ⭐⭐
颜色循环 添加颜色主题切换
发光效果 添加 bloom 后期处理 ⭐⭐⭐

本文档由 ThreeLab 编辑整理,如需转载,请注明出处。