React+Three.js 实现 Apple 热成像 logo
React Three.js 实现 Apple 热成像 Logo引言热成像效果是一种通过颜色渐变来表现温度分布的可视化技术在工业检测、医疗影像和艺术创作中都有广泛应用。本文将带你从零开始使用 React 和 Three.js 构建一个动态的 Apple logo 热成像效果。我们将从基础概念出发逐步深入最终实现一个可交互的 3D 场景。## 一、基础概念Three.js 与 React 的结合Three.js 是一个基于 WebGL 的 3D 图形库而 React 是流行的前端框架。通过react-three/fiber和react-three/drei这两个库我们可以将 Three.js 的声明式 API 无缝集成到 React 组件中。### 核心组件介绍-Canvas: 提供 Three.js 渲染上下文-Mesh: 代表 3D 物体包含几何体geometry和材质material-ShaderMaterial: 允许自定义着色器实现热成像效果的关键## 二、环境搭建与基础场景首先我们需要安装必要的依赖包。创建一个新的 React 项目然后安装bashnpm install three react-three/fiber react-three/drei接下来我们创建一个基础场景包含一个简单的 3D 物体jsx// App.jsx - 基础 Three.js 场景import React from react;import { Canvas } from react-three/fiber;import { OrbitControls } from react-three/drei;// 定义一个简单的立方体组件function Box() { return ( mesh {/* 几何体长方体 */} boxGeometry args{[2, 2, 2]} / {/* 材质标准材质带颜色 */} meshStandardMaterial colorhotpink / /mesh );}export default function App() { return ( div style{{ width: 100vw, height: 100vh }} {/* Canvas 是 Three.js 的渲染容器 */} Canvas camera{{ position: [0, 0, 5] }} {/* 环境光提供基础照明 */} ambientLight intensity{0.5} / {/* 点光源提供方向性照明 */} pointLight position{[10, 10, 10]} / {/* 我们的 3D 对象 */} Box / {/* 轨道控制器允许用户旋转视角 */} OrbitControls / /Canvas /div );}这段代码创建了一个基础的 3D 场景一个粉色的立方体支持鼠标拖拽旋转。这是理解 Three.js 在 React 中工作的第一步。## 三、热成像效果的原理热成像效果的核心是通过颜色映射color mapping来表现数据。在 3D 图形中我们可以通过顶点着色器vertex shader和片元着色器fragment shader来控制每个像素的颜色。### 颜色映射技术1.线性渐变从蓝色低温到红色高温2.伪彩色使用彩虹色阶3.自定义调色板根据需求设计颜色过渡我们将使用自定义着色器基于模型表面的法线方向或自定义数据来生成热成像效果。## 四、实现 Apple Logo 模型为了简化我们使用内置几何体组合成 Apple logo 的形状。实际项目中可以导入 SVG 或 GLTF 模型。jsx// AppleLogo.jsx - Apple Logo 3D 模型import React from react;import * as THREE from three;export default function AppleLogo() { return ( group {/* 主体使用圆环几何体组合 */} mesh position{[-1, 0, 0]} ringGeometry args{[0.8, 1.2, 32]} / meshStandardMaterial colorgray / /mesh mesh position{[1, 0, 0]} ringGeometry args{[0.8, 1.2, 32]} / meshStandardMaterial colorgray / /mesh {/* 叶子使用球体 */} mesh position{[0, 1.2, 0]} sphereGeometry args{[0.3, 16, 16]} / meshStandardMaterial colorgreen / /mesh {/* 茎使用圆柱体 */} mesh position{[0, 0.8, 0]} cylinderGeometry args{[0.1, 0.1, 0.5, 8]} / meshStandardMaterial colorbrown / /mesh /group );}## 五、热成像着色器实现现在进入核心部分——自定义着色器。我们将创建一个 ShaderMaterial通过顶点位置和自定义数据来生成热成像颜色。### 顶点着色器glsl// vertex.glslvarying float vTemperature;void main() { // 基于位置计算温度值模拟热源 vTemperature position.y position.x * 0.5; gl_Position projectionMatrix * modelViewMatrix * vec4(position, 1.0);}### 片元着色器glsl// fragment.glslvarying float vTemperature;void main() { // 颜色映射从蓝色到红色 vec3 color1 vec3(0.0, 0.0, 1.0); // 蓝色 vec3 color2 vec3(1.0, 0.0, 0.0); // 红色 // 根据温度插值 vec3 finalColor mix(color1, color2, vTemperature); gl_FragColor vec4(finalColor, 1.0);}### 完整的 React 组件jsx// ThermalApple.jsx - 热成像 Apple Logoimport React, { useMemo } from react;import * as THREE from three;import { useFrame } from react-three/fiber;export default function ThermalApple() { // 创建自定义着色器材质 const shaderMaterial useMemo(() { return new THREE.ShaderMaterial({ // 顶点着色器传递位置信息作为温度 vertexShader: varying float vTemperature; void main() { // 基于位置和时间的温度计算 vTemperature position.y * 0.5 position.x * 0.3 0.5; gl_Position projectionMatrix * modelViewMatrix * vec4(position, 1.0); } , // 片元着色器颜色映射 fragmentShader: varying float vTemperature; void main() { // 热成像色阶蓝 - 青 - 黄 - 红 vec3 colorLow vec3(0.0, 0.0, 1.0); // 蓝色 vec3 colorMid vec3(0.0, 1.0, 0.0); // 绿色 vec3 colorHigh vec3(1.0, 0.0, 0.0); // 红色 vec3 finalColor; if (vTemperature 0.5) { finalColor mix(colorLow, colorMid, vTemperature * 2.0); } else { finalColor mix(colorMid, colorHigh, (vTemperature - 0.5) * 2.0); } gl_FragColor vec4(finalColor, 1.0); } , // 传递 uniforms这里可以添加时间等动态数据 uniforms: {} }); }, []); return ( group {/* 主体部分应用热成像着色器 */} mesh position{[-1, 0, 0]} material{shaderMaterial} ringGeometry args{[0.8, 1.2, 64]} / /mesh mesh position{[1, 0, 0]} material{shaderMaterial} ringGeometry args{[0.8, 1.2, 64]} / /mesh {/* 叶子 */} mesh position{[0, 1.2, 0]} material{shaderMaterial} sphereGeometry args{[0.3, 32, 32]} / /mesh {/* 茎 */} mesh position{[0, 0.8, 0]} material{shaderMaterial} cylinderGeometry args{[0.1, 0.1, 0.5, 16]} / /mesh /group );}## 六、动态热成像效果为了让效果更生动我们可以添加时间变量让热成像图案动态变化。jsx// DynamicThermalApple.jsx - 动态热成像import React, { useMemo, useRef } from react;import * as THREE from three;import { useFrame } from react-three/fiber;export default function DynamicThermalApple() { const materialRef useRef(); // 创建包含时间 uniform 的着色器 const shaderMaterial useMemo(() { return new THREE.ShaderMaterial({ uniforms: { uTime: { value: 0 } }, vertexShader: varying float vTemperature; uniform float uTime; void main() { // 动态温度随时间变化的正弦波 vTemperature sin(position.x * 2.0 uTime) * 0.5 0.5; gl_Position projectionMatrix * modelViewMatrix * vec4(position, 1.0); } , fragmentShader: varying float vTemperature; void main() { vec3 color1 vec3(0.0, 0.0, 1.0); // 蓝 vec3 color2 vec3(1.0, 1.0, 0.0); // 黄 vec3 color3 vec3(1.0, 0.0, 0.0); // 红 vec3 finalColor; if (vTemperature 0.5) { finalColor mix(color1, color2, vTemperature * 2.0); } else { finalColor mix(color2, color3, (vTemperature - 0.5) * 2.0); } gl_FragColor vec4(finalColor, 1.0); } }); }, []); // 每帧更新时间 uniform useFrame((state) { if (materialRef.current) { materialRef.current.uniforms.uTime.value state.clock.elapsedTime; } }); return ( group mesh position{[-1, 0, 0]} ref{materialRef} material{shaderMaterial} ringGeometry args{[0.8, 1.2, 64]} / /mesh mesh position{[1, 0, 0]} material{shaderMaterial} ringGeometry args{[0.8, 1.2, 64]} / /mesh /group );}## 七、整合到主应用最后我们将所有组件整合到主应用中并添加一些交互元素jsx// App.jsx - 主应用import React from react;import { Canvas } from react-three/fiber;import { OrbitControls, Stats } from react-three/drei;import DynamicThermalApple from ./DynamicThermalApple;export default function App() { return ( div style{{ width: 100vw, height: 100vh, background: #1a1a2e }} Canvas camera{{ position: [0, 0, 6], fov: 60 }} {/* 环境光 */} ambientLight intensity{0.3} / {/* 点光源 */} pointLight position{[5, 5, 5]} intensity{0.8} / {/* 动态热成像 Apple Logo */} DynamicThermalApple / {/* 轨道控制器 */} OrbitControls enablePan{false} minDistance{3} maxDistance{10} / {/* 性能统计 */} Stats / /Canvas {/* UI 提示 */} div style{{ position: absolute, bottom: 20, left: 50%, transform: translateX(-50%), color: white, fontFamily: Arial, fontSize: 14, opacity: 0.7 }} 拖拽旋转 · 滚轮缩放 /div /div );}## 总结通过本文我们完成了从零到一的 React Three.js 热成像 Apple Logo 实现。整个过程涵盖了1.基础环境搭建使用react-three/fiber和react-three/drei集成 Three.js2.3D 模型构建组合基础几何体模拟 Apple Logo 形状3.着色器编程通过 GLSL 实现颜色映射从简单的线性渐变到动态热成像4.交互优化添加轨道控制器和性能统计热成像效果的核心在于着色器中的颜色映射算法。在实际项目中你可以- 使用更复杂的调色板如彩虹色阶- 导入真实的 3D 模型文件- 添加鼠标交互让温度随光标位置变化- 结合 WebRTC 实现实时热成像数据可视化这个项目展示了前端技术与计算机图形学的完美结合为数据可视化和创意编程提供了无限可能。欢迎在此基础上继续探索创造出更多惊艳的视觉效果。

相关新闻

从0到1构建AI模型评估实验室:含自动化测试脚本、偏见检测模板、推理延迟压测方案(限前200家企业领取)

从0到1构建AI模型评估实验室:含自动化测试脚本、偏见检测模板、推理延迟压测方案(限前200家企业领取)

更多请点击: https://intelliparadigm.com 第一章:企业AI模型选择建议 企业在落地AI应用时,模型选择不应仅聚焦于“最先进”或“参数量最大”,而需围绕业务目标、数据特征、工程约束与长期维护成本进行系统性权衡。盲目引入大模型…

2026/7/24 21:46:40 阅读更多 →
ncmdumpGUI:Windows下一键解密网易云音乐NCM文件的完整指南

ncmdumpGUI:Windows下一键解密网易云音乐NCM文件的完整指南

ncmdumpGUI:Windows下一键解密网易云音乐NCM文件的完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了喜欢的歌曲…

2026/7/24 21:45:39 阅读更多 →
LTE站点DUS板卡副板DISABLED故障案例分析——EC总线异常导致小区退服及资源激活超时案例

LTE站点DUS板卡副板DISABLED故障案例分析——EC总线异常导致小区退服及资源激活超时案例

一、故障现象 LTE站点上报小区退服,告警显示为资源激活超时,如下: 查询小区当前是DISABLED,如下: 二、故障排查与处理过程 1、初步排查:RU设备及光路状态正常,如下: 2、深入排查:主板状态正常,副板DISABLED,如下: 3、后台操作:经分析,ru状态正常,但副板卡没起…

2026/7/24 21:45:39 阅读更多 →

最新新闻

agx orin适配xcDeserializer3.0+gmsl双sensor

agx orin适配xcDeserializer3.0+gmsl双sensor

这里固定双sensor使用portA口,vc0->/dev/video1 vc1->/dev/video0 //tegra234-p3737-camera-zuojisi-overlay.dts // SPDX-License-Identifier: GPL-2.0-only // SPDX-FileCopyrightText: Copyright (c) 2018-2023, NVIDIA CORPORATION & AFFILIATES. All rights r…

2026/7/24 21:53:42 阅读更多 →
告别暗黑3重复操作:D3KeyHelper自动化工具让游戏体验升级

告别暗黑3重复操作:D3KeyHelper自动化工具让游戏体验升级

告别暗黑3重复操作:D3KeyHelper自动化工具让游戏体验升级 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中繁琐的按键…

2026/7/24 21:53:42 阅读更多 →
3分钟破解大众点评数据采集难题:全自动获取商家信息的完整方案

3分钟破解大众点评数据采集难题:全自动获取商家信息的完整方案

3分钟破解大众点评数据采集难题:全自动获取商家信息的完整方案 【免费下载链接】dianping_spider 大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新 项目地址: https://gitcode.com/gh_mirrors/di/dianping…

2026/7/24 21:53:42 阅读更多 →
正规飞达供料器厂家深度盘点:昱丰原智能精密供料技术与选型适配

正规飞达供料器厂家深度盘点:昱丰原智能精密供料技术与选型适配

正规飞达供料器厂家深度盘点:昱丰原智能精密供料技术与选型适配解析 随着长三角SMT智能制造、半导体封测、新能源汽车电子产业持续升级,精密供料环节已然成为制约高端产线良率与产能的核心工序。飞达供料器作为自动化产线的核心供料单元,其供…

2026/7/24 21:53:42 阅读更多 →
大型企业智能制造运营平台整体解决方案,168页PPT全揭秘

大型企业智能制造运营平台整体解决方案,168页PPT全揭秘

很多大制造企业,车间里设备品牌五花八门,数据互相不认。生产计划靠Excel排,换一个订单型号得折腾半天。设备坏了才知道,停线一小时就是几十万损失。质检全靠老师傅眼睛看,漏检、错检频频发生。仓库里物料堆成山&#x…

2026/7/24 21:53:42 阅读更多 →
中兴光猫工厂模式终极解锁指南:zteOnu工具深度实战

中兴光猫工厂模式终极解锁指南:zteOnu工具深度实战

中兴光猫工厂模式终极解锁指南:zteOnu工具深度实战 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 想象一下,你正面对着家中的中兴光猫,想要调整一些…

2026/7/24 21:52:42 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻