当前位置: 首页 > news >正文

在 React 项目中安装和配置 Three.js

React 与 Three.js 的结合 :通过 React 管理组件化结构和应用逻辑,利用 Three.js 实现 3D 图形的渲染与交互。使用这种方法,我们可以在保持代码清晰和结构化的同时,实现令人惊叹的 3D 效果。

在本文中,我们将以一个简单的示例为基础,详细讲解如何在 React 项目中集成 Three.js,并创建一个动态的 3D 场景。

本文介绍使用最原始的three,如果想了解 react-three-fiber 可以参考这篇文章:https://mp.weixin.qq.com/s/y0gsws7DqvbT_iZRasenkA?token=1707814885&lang=zh_CN

安装依赖并设置项目

使用 Vite 初始化项目,并安装 Three.js:

# 创建项目
npm create vite threejs-react-demo --template react# 进入项目目录
cd threejs-react-app# 安装 Three.js
npm install three

项目目录结构

我们将创建以下目录结构:

src/
├── components/       # 存放 React 组件
│   ├── ThreeScene.jsx # Three.js 场景组件
├── App.jsx           # 入口文件
└── main.jsx          # React 渲染入口

创建 Three.js 场景

1. 创建 ThreeScene.jsx
import React, { useEffect, useRef } from 'react';
import * as THREE from 'three';const ThreeScene = () => {const containerRef = useRef(null);useEffect(() => {// 获取容器元素const container = containerRef.current;// 创建场景const scene = new THREE.Scene();// 创建相机const camera = new THREE.PerspectiveCamera(75,container.clientWidth / container.clientHeight,0.1,1000);camera.position.z = 5;// 创建渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(container.clientWidth, container.clientHeight);container.appendChild(renderer.domElement);// 添加一个立方体const geometry = new THREE.BoxGeometry();const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);scene.add(cube);// 动画函数const animate = () => {requestAnimationFrame(animate);// 旋转立方体cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);};animate();// 窗口尺寸调整const handleResize = () => {camera.aspect = container.clientWidth / container.clientHeight;camera.updateProjectionMatrix();renderer.setSize(container.clientWidth, container.clientHeight);};window.addEventListener('resize', handleResize);// 清理return () => {window.removeEventListener('resize', handleResize);container.removeChild(renderer.domElement);};}, []);return <div ref={containerRef} style={{ width: '100%', height: '100vh' }} />;
};export default ThreeScene;
2. 修改 App.jsx

ThreeScene 组件引入应用中。

import React from 'react';
import ThreeScene from './components/ThreeScene';function App() {return (<div><h1 style={{ textAlign: 'center' }}>React + Three.js 示例</h1><ThreeScene /></div>);
}export default App;

运行项目

运行以下命令启动开发服务器:

npm run dev

打开浏览器访问 http://localhost:5173,你将看到一个旋转的绿色立方体。

在这里插入图片描述

在本文中,我们将以一个简单的示例为基础,详细讲解如何在 React 项目中集成 Three.js,并创建一个动态的 3D 场景。无论你是刚接触 3D 开发,还是已有一定经验,相信都能从中有所收获。

相关文章:

在 React 项目中安装和配置 Three.js

React 与 Three.js 的结合 &#xff1a;通过 React 管理组件化结构和应用逻辑&#xff0c;利用 Three.js 实现 3D 图形的渲染与交互。使用这种方法&#xff0c;我们可以在保持代码清晰和结构化的同时&#xff0c;实现令人惊叹的 3D 效果。 在本文中&#xff0c;我们将以一个简…...

服务器压力测试怎么做

在部署任何Web应用程序或服务之前&#xff0c;进行服务器压力测试&#xff08;也称为负载测试&#xff09;是确保系统能够处理预期用户流量的关键步骤。通过模拟大量并发请求&#xff0c;可以评估服务器的性能、稳定性和响应时间&#xff0c;识别潜在瓶颈&#xff0c;并优化资源…...

TCN-Transformer+LSTM多变量回归预测(Matlab)添加气泡图、散点密度图

TCN-TransformerLSTM多变量回归预测&#xff08;Matlab&#xff09;添加气泡图、散点密度图 目录 TCN-TransformerLSTM多变量回归预测&#xff08;Matlab&#xff09;添加气泡图、散点密度图预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基本介绍 1.双路创新&#xff…...

Mac 查询IP配置,网络代理

常用命令 1.查询IP ifconfig | grep "inet" 2.ping查询 ping 172.18.54.19&#xff08;自己IP&#xff09; 3.取消代理&#xff0c;通过在终端执行以下命令&#xff0c;可以取消 Git 的代理设置 git config --global --unset http.proxy git config --global …...

Vue2五、商品分类:My-Tag表头组件,My-Table整个组件

准备&#xff1a; 安包 npm less less-loader。拆分&#xff1a;一共分成两个组件部分&#xff1a; 1&#xff1a;My-Tag 标签一个组件。2&#xff1a;My-Table 整体一个组件&#xff08;表头不固定&#xff0c;内容不固定&#xff08;插槽&#xff09;&#xff09; 一&…...

梯度下降法求六轴机械臂逆向解

梯度下降法求六轴机械臂逆向解 一、几何基础 对于上述六轴机械臂的数学建模来说&#xff0c;可以构建一个六轴机械臂的运动学正逆解的数学模型&#xff0c;在一个直角坐标系中有如下旋转矩阵&#xff1a; 绕x轴旋转 R x ( θ x ) [ 1 0 0 0 cos ⁡ θ x sin ⁡ θ x 0 − …...

【生成模型之九】Paint by Example: Exemplar-based Image Editing with Diffusion Models

论文:Paint by Example: Exemplar-based Image Editing with Diffusion Models 代码:https://github. com/Fantasy-Studio/Paint-by-Example 为了实现高质量的基于样本的图像编辑,我们引入了四项关键技术,即利用图像先验、强数据-mask增强、内容瓶颈CLIP class token和无…...

集成RabbitMQ+MQ常用操作

文章目录 1.环境搭建1.Docker安装RabbitMQ1.拉取镜像2.安装命令3.开启5672和15672端口4.登录控制台 2.整合Spring AMQP1.sun-common模块下创建新模块2.引入amqp依赖和fastjson 3.新建一个mq-demo的模块1.在sun-frame下创建mq-demo2.然后在mq-demo下创建生产者和消费者子模块3.查…...

PVE虚拟化平台之开启虚拟机IP显示方法

PVE虚拟化平台之开启虚拟机IP显示方法 一、PVE平台介绍1.1 PVE简介1.2 PVE特点1.3 PVE主要使用场景二、检查PVE环境2.1 环境介绍2.2 检查PVE和虚拟机状态三、虚拟机开启Qemu代理四、Linux虚拟机安装Guest-Agent4.1 进入虚拟机VNC控制台4.2 查看虚拟机IP五、Windows虚拟机安装Gu…...

子Shell及Shell嵌套模式

子Shell 概念 Shell子进程&#xff0c;Shell脚本是从上至下&#xff0c;从左至右依次执行每一行的命令及语句的&#xff0c;即执行完一个命令之后再执行下一个。如果在shell脚本中遇到子脚本(即脚本嵌套)&#xff0c;就会先执行子脚本的内容&#xff0c;完成后再返回父脚本继…...

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂&#xff0c;你在本地删除文件&#xff0c;并没有同步到云端&#xff0c;但是本地却显示同步成功。 比如删掉了一个目录&#xff0c;在本地看已经删掉&#xff0c;onedrive显示已同步&#xff0c;但是别的电脑并不会同步到这个删除操作&#xff0c;在网页版…...

【gym】给定的强化学习环境简介(二)

文章目录 环境介绍一 box2dbipedal_walkercar_dynamicscar_racinglunar_lander 二、 classic_controlacrobotCartPolecontinuous_mountain_carmountain_carpendulum 三、toy_textblackjackcliffwalkingfrozentaxi 四、mujocoAnt&#xff1a;HalfCheetah&#xff1a;Hopper&…...

ctfhub disable_functions关卡

1.CTFHub Bypass disable_function —— LD_PRELOAD 2.CTFHub Bypass disable_function —— ShellShock 3.CTFHub Bypass disable_function —— Apache Mod CGI 4.CTFHub Bypass disable_function —— 攻击PHP-FPM 5.CTFHub Bypass disable_function —— GC UAF 6.CTFHub B…...

SpringAI人工智能开发框架006---SpringAI多模态接口_编程测试springai多模态接口支持

可以看到springai对多模态的支持. 同样去创建一个项目 也是跟之前的项目一样,修改版本1.0.0 这里 然后修改仓库地址,为springai的地址 然后开始写代码...

2025年我国网络安全发展形势展望

展望2025年&#xff0c;我国网络安全产业有望迎来新的快速增长阶段&#xff0c;零信任安全架构将在各行各业加快应用落地&#xff0c;数据安全技术攻关和应用进程加快&#xff0c;关键基础设施安全能力不断提升。同时&#xff0c;也应关注国家级网络对抗风险加剧、网络安全产业…...

【漏洞复现】BIG-IP Next Central Manager OData 注入漏洞(CVE-2024-21793)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:BIG-IP Next Central Manager OData 注入漏洞漏洞编号:CVE-2024-21793漏洞威胁等级:超危影响范围:BIG-IP Next Central Manage…...

GitLab部署到阿里云服务器上

GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。 一、安装 1.创建一…...

VTK知识学习(27)- 图像基本操作(二)

1、图像类型转换 1&#xff09;vtkImageCast 图像数据类型转换在数字图像处理中会频繁用到。一些常用的图像算子(例如梯度算子)在计算时出于精度的考虑&#xff0c;会将结果存储为float或double类型&#xff0c;但在图像显示时&#xff0c;一般要求图像为 unsigned char 类型,…...

MyBatis如何处理延迟加载?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis如何处理延迟加载&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis如何处理延迟加载&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 支持 延迟加载&#xff08;Lazy Loading&am…...

前端网络之【浏览器跨域问题分析与解决方案】

文章目录 同源策略同源与异源跨域的限制场景解决方案 CORS 请求分类 简单请求预检请求 注意点一 【关于Cookie】注意点二 【关于跨域获取响应头】 JSONP 基本流程 代理服务器 如何选择对应方案 同源策略 **同源策略是一套浏览器的安全策略机制&#xff0c;当一个源的文档和脚…...

基于SAC强化学习算法的ROS2机器人运动控制实战解析

1. SAC强化学习算法与ROS2的完美结合 第一次接触SAC算法是在三年前的一个机器人项目中&#xff0c;当时我们团队正在为移动机器人寻找一种既稳定又高效的决策算法。试过DQN、PPO等主流方法后&#xff0c;最终SAC以其出色的样本效率和稳定性胜出。现在结合ROS2的强大通信能力&am…...

3DS游戏格式转换指南:用3dsconv轻松实现CCI到CIA的完美转换

3DS游戏格式转换指南&#xff1a;用3dsconv轻松实现CCI到CIA的完美转换 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 还在…...

WangEditor自定义元素踩坑实录:除了换行问题,这些API细节和样式继承你也得小心

WangEditor自定义元素深度避坑指南&#xff1a;从样式继承到API边界问题全解析 第一次在项目中尝试用WangEditor扩展自定义标题样式时&#xff0c;我对着编辑器里莫名其妙消失的边框样式发了半小时呆。官方文档明明写着"简单四步实现元素扩展"&#xff0c;但实际开发…...

精选1款免费商用字体:思源宋体从选择到实战的高效应用指南

精选1款免费商用字体&#xff1a;思源宋体从选择到实战的高效应用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 为什么选择免费商用字体对设计项目至关重要&#xff1f; 在当今…...

Ostrakon-VL-8B入门必看:Gradio Web UI快速启动与单图分析详解

Ostrakon-VL-8B入门必看&#xff1a;Gradio Web UI快速启动与单图分析详解 如果你正在寻找一个能看懂店铺、厨房、商品图片&#xff0c;并能回答你各种问题的AI助手&#xff0c;那么Ostrakon-VL-8B可能就是你要找的答案。这是一个专门为餐饮服务和零售商店场景优化的多模态视觉…...

MATLAB/Simulink三相四桥臂逆变器仿真模型:电压外环电流内环控制策略下的负载平衡与...

matlab/simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略&#xff0c;交流测可以接不平衡负载&#xff0c;在负载不平衡的情况下依然可以保持输出电压对称。 直流侧输入电压范围450V~2000V均可。 交流测输出电压为380/220V&#xff0c;不平衡负载和平衡负载…...

金融C++内存池测试必须绕开的7个反模式,92%的量化团队仍在踩坑!

第一章&#xff1a;金融C内存池测试的底层逻辑与行业特殊性金融系统对低延迟、高确定性及零内存碎片的严苛要求&#xff0c;使内存池&#xff08;Memory Pool&#xff09;成为高频交易、做市引擎与风控模块中不可或缺的基础设施。与通用堆分配器不同&#xff0c;金融C内存池的设…...

5分钟解锁B站m4s缓存:跨平台无损转换工具深度解析

5分钟解锁B站m4s缓存&#xff1a;跨平台无损转换工具深度解析 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站缓存视频无法在其他设…...

突破性AI医疗诊断方案:基于深度学习的开源心电图分类实战指南

突破性AI医疗诊断方案&#xff1a;基于深度学习的开源心电图分类实战指南 【免费下载链接】ecg-classification Code for training and test machine learning classifiers on MIT-BIH Arrhyhtmia database 项目地址: https://gitcode.com/gh_mirrors/ec/ecg-classification …...

企业必须为 Agent 配一个“人工兜底”策略

企业必须为 Agent 配一个“人工兜底”策略 摘要/引言 开门见山:凌晨三点的Agent报警邮件与CEO的抉择 202X年7月15日凌晨3:17,字节跳动旗下飞书客服Agent“小助手Pro”的自动迭代模块误触发了“智能调价权限升级”——原本它只能协助用户调整基础服务套餐的折扣率不超过5%,…...