罗盘

Three.js 可定制罗盘特效 | 三维可视化 / AI 提示词
📋 AI 提示词
prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
使用 Three.js 实现可定制颜色的罗盘特效,具体要求:
【核心特效】
- 多层圆环结构
- 辐射状刻度线
- 旋转动画效果
- 三色实时切换
- 动态颜色混合
【场景与光照】
- 自定义深色背景
- PlaneGeometry 全屏
- 2D GLSL 绘制
【交互与控制】
- 颜色选择器面板
- 主色调/次级色调/强调色
- 背景色实时切换
【技术要求】
- Three.js 版本 (ES Module)
- 自定义 ShaderMaterial
- PlaneGeometry 1x1
- 2D 几何绘制算法
🖼️ 效果预览
🎮 案例演示
📖 效果拆解
| 层次 | 视觉效果 | 技术实现 |
|---|---|---|
| 基础 | 罗盘圆盘 | 1x1 PlaneGeometry |
| 外环 | 36 辐射刻度 | radiation() 函数 |
| 六边形 | 旋转叠加 | rectangle() 函数 |
| 小圆点 | 12 等分 | circle() 函数 |
| 内环 | 3 角形图案 | 重复旋转 |
🔧 核心技术点
1. 圆环绘制
用距离函数创造清晰的圆环。
glsl
1
2
3
4
5
6
7
float circle(float pre, vec2 p, float r1, float r2, float power) {
float len = length(p);
float d = min(abs(len - r1), abs(len - r2));
if (len > r1 && len < r2) pre /= exp(d) / r2;
float res = power / d;
return clamp(pre + res, 0.0, 1.0);
}
2. 矩形环绘制
创造六边形、三角形等多边形结构。
glsl
1
2
3
4
5
6
7
8
9
10
float rectangle(float pre, vec2 p, vec2 half1, vec2 half2, float power) {
p = abs(p);
float dx1 = (p.y < half1.y) ? abs(half1.x - p.x) : length(p - half1);
float dx2 = (p.y < half2.y) ? abs(half2.x - p.x) : length(p - half2);
float dy1 = (p.x < half1.x) ? abs(half1.y - p.y) : length(p - half1);
float dy2 = (p.x < half2.x) ? abs(half2.y - p.y) : length(p - half2);
float d = min(min(dx1, dx2), min(dy1, dy2));
float res = power / d;
return clamp(pre + res, 0.0, 1.0);
}
3. 辐射状图案
创造罗盘刻度的辐射线效果。
glsl
1
2
3
4
5
6
7
8
9
10
11
12
float radiation(float pre, vec2 p, float r1, float r2, int num, float power) {
float angle = 2.0 * PI / float(num);
float d = 1e10;
for (int i = 0; i < 360; i++) {
if (i >= num) break;
float _d = (r1 < p.y && p.y < r2) ? abs(p.x) : min(length(p - vec2(0.0, r1)), length(p - vec2(0.0, r2)));
d = min(d, _d);
p = rotate(p, angle);
}
float res = power / d;
return clamp(pre + res, 0.0, 1.0);
}
4. 2D 旋转矩阵
实现几何图形的旋转。
glsl
1
2
3
4
vec2 rotate(vec2 p, float rad) {
float c = cos(rad), s = sin(rad);
return mat2(c, -s, s, c) * p;
}
💡 调试与优化
| 问题类型 | 表现形式 | 解决方案 |
|---|---|---|
| 线条过粗 | 细节糊掉 | 减小 power 参数 |
| 颜色过暗 | 不够明亮 | 增大 pow(dst, 2.5) 指数 |
| 旋转抖动 | 不平滑 | 增加动画帧率 |
🚀 扩展思路
| 变体效果 | 核心改动 | 难度 |
|---|---|---|
| 指南针 | 添加指针 | ⭐ |
| 时钟 | 12 刻度 | ⭐ |
| 雷达扫描 | 扫描动画 | ⭐⭐ |
| 仪表盘 | 添加数字 | ⭐⭐ |
| 导航罗盘 | 动态指向 | ⭐⭐⭐ |
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。







京公网安备 11010502038735号
💬 评论区
评论功能即将上线,敬请期待!