热力图

Three.js 热力图效果 | 三维可视化 / AI 提示词
📋 AI 提示词
prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用 Three.js 实现热力图效果,具体要求:
【核心特效】
- 多点热源叠加
- 颜色渐变映射
- 动态参数控制
【场景与光照】
- 白色环境光
- 透明背景
- 坐标轴辅助
【交互与控制】
- OrbitControls 视角控制
- GUI 参数调节面板
【技术要求】
- Three.js 最新版本
- lil-gui 控制面板
🖼️ 效果预览
🎮 案例演示
📖 效果拆解
| 层次 | 视觉效果 | 技术实现 |
|---|---|---|
| 基础 | 平面几何体 | PlaneGeometry(10, 10) |
| 核心特效 | 热力图渲染 | 点距离场叠加 |
| 增强细节 | 颜色渐变 | 三角函数颜色映射 |
| 交互层 | GUI 参数调节 | lil-gui |
🔧 核心技术点
1. 热力点数据结构
javascript
1
2
3
4
5
6
const arr = [
[0., 0., 10.], [.2, .6, 5.], [.25, .7, 8.],
[.33, .9, 5.], [.35, .8, 6.], [0.017, 5.311, 6.000],
[-.45, .8, 4.], [-.2, -.6, 5.], [-.25, -.7, 8.],
// ... 更多点
].map(i => new THREE.Vector3(...i));
2. 热力值计算
glsl
1
2
3
4
5
6
7
float d = 0.;
for (int i = 0; i < PointsCount; i++) {
vec3 v = Points[i];
float intensity = v.z / HEAT_MAX;
float pd = (1. - length(uv - v.xy) / PointRadius) * intensity;
d += pow(max(0., pd), 2.);
}
3. 颜色渐变映射
glsl
1
2
3
4
vec3 gradient(float w, vec2 uv) {
w = pow(clamp(w, 0., 1.) * 3.14159 * .5, .9);
return vec3(sin(w), sin(w * 2.), cos(w)) * 1.1 + mix(c1, c2, w) * 1.1;
}
4. 动态着色器生成
javascript
1
2
3
const fragmentShader = 'precision highp float;\n' + 'varying vec2 vUv; \n' +
Object.keys(uniforms1).map(i => 'uniform ' + uniforms1[i].unit + ' ' + i + ';')
.join('\n') + '\nuniform vec3 Points[' + uniforms1.PointsCount.value + '];';
💡 调试与优化
| 问题类型 | 表现形式 | 解决方案 |
|---|---|---|
| 着色器编译失败 | 黑屏或报错 | 检查 uniforms 定义 |
| 热力效果不明显 | 颜色太淡 | 调整强度和半径参数 |
| 性能问题 | 帧率下降 | 减少热力点数量 |
| 颜色异常 | 颜色混合错误 | 检查渐变函数 |
🚀 扩展思路
| 变体效果 | 核心改动 | 难度 |
|---|---|---|
| 动态热力点 | 添加动画更新 | ⭐⭐ |
| 3D 热力图 | 使用体积渲染 | ⭐⭐⭐ |
| 鼠标交互 | 点击添加热力点 | ⭐⭐ |
| 数据可视化 | 加载外部数据 | ⭐⭐⭐ |
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。







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