React+Three.js实现粒子包围的安卓机器人

这篇具有很好参考价值的文章主要介绍了React+Three.js实现粒子包围的安卓机器人。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

喜欢做动画的我很早之前就已经开始关注Threejs这个框架了,觉得这个框架老酷炫了,可以在浏览器中展示一个3D场景,奈何时间与精力关系(主要是懒)一直都没有真正花功夫去学,好在最近终于开始简单学了一点Threejs的皮毛,并且写了个安卓机器人的小demo,涉及到的知识点是一些简单的几何模型的使用,有兴趣的就来一起看下吧。

创建React项目

Threejs可以用在不同项目中,可以用纯js写,也可以用Vue来写,我这里使用的是React+ts,第一步咱先来创建个项目,使用cra创建

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

等待一段时间的项目初始化之后,在vscode中打开这个叫robot的工程,然后在终端里面分别执行以下命令

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

第一个命令是安装threejs这个库,第二个命令是安装@types/three这个库,后者是一个TypeScript的类型定义库,用于为 Three.js 库提供类型定义,库都安装好了之后我们打开项目为我们默认创建好的App.tsx文件,这个就是工程的示例页面,我们将在里面做改动

创建三要素

首先把App.tsx里面的代码都删除,换成如下代码

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

这里创建了一个div的Html元素containerRef,并且在div标签中引用它,而useEffect内部就是用来写我们Three的代码,在任何一个Three的工程中,有三个要素是必不可少的,那就是渲染器,相机以及场景,所以我们第一步就是将三个要素创建出来

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

一般都是使用透视相机PerspectiveCamera,第一个参数是fov,表示相机所成的一个四棱台远面与近面之间的夹角,夹角越小,看见的东西越少,夹角越大,看见的东西就越多,但是周围会显的比较模糊,一般取值以45~75最佳,第二个参数aspect是近裁面的一个宽高比,我们用窗口的宽除以窗口的高就可以了,第三个值near与第四个值far分别是与近面和远面的距离,这里设置的值分别为0.1与1000,调用camera.positon.set表示设置相机的位置,默认都是在(0,0,0)的位置,我们这里给相机设置的位置为(15,12,8),并且让相机正对(0,0,0)的位置,了解完了一些概念后,开始创建机器人相关的物体了

双脚

整个机器人是使用若干个几何体拼接起来的,所以我们从下往上先将双腿做出来

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

首先创建了一个Object3D对象robot对象,Object3D是一个基类,所有3D对象都是Object3D的子类或者衍生类,我们后面所创建的机器人身上的部位最终都会addrobot里面去,generateLegs是用来创建腿的函数,调用了两次,分别在(0,0,2)和(0,0,-2)位置创建了两个绿色的胶囊型物体,材质使用的是MeshStandardMaterial,并且设置了roughnessmetalness,让双腿有金属质感,然后用创建好的胶囊与材质生成Mesh后,腿就制作好了,添加到robot里去,并且将robot添加到场景scene里面,腿的工作就完成了,但是这个时候如果想去浏览器看下效果的话,会发现是漆黑一片的

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

原因是我们的材质是MeshStandardMaterial,这种材质是感光的,需要有光源照在上面才会看见,所以我们还需要在场景里面添加进去光源,这里使用平行光DirectionalLight

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

平行光的颜色是白色,强度设置的是5,这些可以根据自己的喜好去定义,光源所在的位置是(5,5,10),有了光源后,这样子就能看见腿了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

身体

腿往上就是身体,身体是一个圆柱体,所以这里使用的是CylinderGeometry,并且在y轴方向上往上平移4个单位,看代码

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

CylinderGeometry第一个参数是上部分圆的半径,第二个参数是下部分圆的半径,第三个参数是高度,材质使用的跟腿一样,然后身体也出来了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

手臂

两侧的手臂跟腿是差不多的做法,唯一区别就是位置不一样

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

脑袋

脑袋是个半球体,这里使用SphereGeometry创建个球体,半径设置为4,widthSegmentheightSegment都使用默认值,phiStartphiLength分别是水平方向上的起始角度与跨度,由于水平方向上是整个圆,所以phiLength设置为Math.PI * 2,相对的垂直方向上的跨度就是90度,这里给thetaLength设置为Math.PI * 0.5

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

脑袋在y轴方向上平移了6.5个单位,这个时候浏览器上面机器人的脑袋就已经出来了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

触角

触角的位置要比脑袋还要高,同时它也要有点角度,所以创建个generateHorn函数,除了接受位置参数之外,还要接受角度参数,代码如下

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

眼睛

眼睛是两个黑色的球体,所以还是使用SphereGeometry,位于脑袋的内部,从脑袋里面露出来个半圆作为眼睛,代码如下

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

增加页面互动

我们看到整个机器人都已经出来了,但是目前页面还是不能够操作的,比如现在我们只看到机器人的一侧,另一侧是看不到的,当然这与我们相机摆放的位置有关,调整下相机的位置就好了,不过也可以使用轨道控制器OrbitControls,让页面可以跟着鼠标的操作360度移动,代码很简单,生成个轨道对象,再调用update方法

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

不过加了上述代码后,我们会发现页面还是动不了,因为我们还必须刷新页面,创建个update函数,内部调用requestAnimationFrame,这个函数的执行时机与浏览器的刷新频率是一致的,所以只需要在浏览器刷新的时候,再渲染一次页面,就能完成页面上的动画效果了,代码如下

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

现在我们的页面就可以操作了,来看下

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

我们还可以在update方法中,让机器人自己可以转动起来,比如让它绕着y轴转动,就可以这样写

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

可以看到只需要给robot在y轴上不断减少0.005的角度,机器人就可以自己转动起来了,效果如下

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

我们还可以让机器人变小一些,只需要在robotscale属性上,分别给x,y,z轴方向都设置上缩放比例,机器人的大小就改变了,这里设置了0.3的缩放比例

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

我们看下现在机器人的大小是不是改变了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

的确是变小了,下面来给机器人周围加上一些粒子

制作粒子

这里粒子的原型其实就是一个个小球体,所以几何模型依然使用SphereGeometry,然后由于我们需要制作多个球体,所以还要创建一个Object3D,将所有粒子都放在Object3D里面,至于如何创建多个粒子,这里就用到了copy函数,看代码

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

给球体设置了widthSegmentheightSegment让球体带点棱角,其他的同上面设置的一样,最终生成一个物体mesh,在for循环内每次都会新生成一个targetMesh对象,通过调用copy函数,将mesh复制给target,那么target就拥有mesh的所有属性了,后面只需要给新的target设置新的位置就可以了,编译完之后,我们的机器人周围已经都是小粒子了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

现在这些粒子看起来还不太美观,这里再稍作修改,把上面的金属质感metalness设置为5,粗糙程度roughness设置为0.1,改变一下粒子受光照的效果

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

再看下效果,粒子就变得好看些了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

现在再让粒子360无死角转动起来,给stars的x,y,z上都加上旋转增量,更新一下update函数内的代码

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

最终效果就做好了

React+Three.js实现粒子包围的安卓机器人,javascript,react.js,android

总结

文章到这里就结束了,用的东西都是比较入门的,诸如一些纹理图的加载,GLTF模型的加载等这样的知识点,我仍旧在学习摸索的过程中,后面也会通过一个个小的demo分享出来。文章来源地址https://www.toymoban.com/news/detail-823005.html

到了这里,关于React+Three.js实现粒子包围的安卓机器人的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 简介:在这篇教程中,我们将使用React.js框架创建一个简单的聊天机器人的前端界面,并利用Dialogflo

    作者:禅与计算机程序设计艺术 介绍及动机 聊天机器人(Chatbot)一直是互联网领域中的热门话题。而很多聊天机器人的功能都依赖于人工智能(AI)技术。越来越多的企业希望拥有自己的聊天机器人系统,从而提升自己的竞争力。为此,业界也出现了很多基于开源技术或云

    2024年02月06日
    浏览(42)
  • three.js(四):react + three.js

    绘制多个立方体 1.搭建react+ts 项目 react+ts 的用法可参考此链接: https://react-typescript-cheatsheet.netlify.app/docs/basic/setup 2.安装three依赖 3.安装路由 react-router-v6 的用法可参考此链接:https://juejin.cn/post/7088526716049555492 4.用路由组件包裹APP。 index.tsx 5.构建项目页面 src/view/Basics.tsx src/

    2024年02月11日
    浏览(31)
  • 【机器人状态估计】粒子滤波算法介绍

    问题分类:位姿追踪、局部定位、全局定位;静态、动态环境定位;单一机器人定位、多机器人定位。 贝叶斯滤波框架: 定位置信度与运动模型卷积,两次独立估计值的整合比单一估计值使系统状态确定性更高。 基本思路 随机产生M个粒子(如M=1000),每个粒子表示状态变

    2024年02月22日
    浏览(31)
  • 基于粒子群算法的机器人动态路径规划

    基于粒子群算法的机器人动态路径规划 粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,常用于解决优化问题。在机器人动态路径规划中,粒子群算法可以被应用于寻找最优路径,以使机器人在动态环境中能够高效地规划路径并避免障碍物。 本文将

    2024年02月07日
    浏览(39)
  • 基于粒子群算法的机器人栅格地图路径规划

    基于粒子群算法的机器人栅格地图路径规划 路径规划是机器人导航和自主移动的重要任务之一。在栅格地图中,机器人需要找到一条最优路径以避开障碍物并到达目标位置。粒子群算法(Particle Swarm Optimization,PSO)是一种模拟自然群体行为的优化算法,可以用于解决路径规划

    2024年02月07日
    浏览(36)
  • Three.js 的组件库react-three-fiber和react-three-drei

    类似于这种字体,可以用Text或者Text3d,但是要处理一个问题,就是要保证字体一直正面视角。 这中间的处理比较的麻烦,于是可以使用react-three-drei中的Html来做这件事

    2024年01月24日
    浏览(47)
  • 【three.js / React-three-fiber】加载3D模型性能优化

    无论是大型虚拟世界还是简单的网站,性能优化都是必要的。 特别是在运用三维模型的情况下,我们需要更加深入的优化。因为 三维模型通常包含大量的数据和复杂的几何形状 ,如果不进行性能优化,浏览器可能会因为负载过重而崩溃。 在本文中,我们将探讨如何在 thre

    2024年02月02日
    浏览(37)
  • 基于 MATLAB GUI 的粒子群算法机器人避障路径规划

    在本文中,我们将探讨如何使用 MATLAB GUI 和粒子群算法(Particle Swarm Optimization,PSO)实现机器人的避障路径规划。我们将详细介绍这个过程,并提供相应的源代码。 一、问题描述: 我们考虑的是一个机器人在给定环境中的自主导航问题。机器人需要从起始点到达目标点,同

    2024年02月06日
    浏览(42)
  • 【路径规划】粒子群算法求解机器人障碍物环境的Voronoi图路径规划【含GUI Matlab源码 3748期】

    粒子群算法(Particle Swarm Optimization, PSO)可以用于栅格地图上机器人的最短路径规划。在这种问题中,栅格地图被划分为离散的单元格,每个单元格可以是阻挡或可通过的区域。机器人需要从起始位置移动到目标位置,避免碰到阻挡。 PSO算法中,通过使用一群粒子来搜索最优

    2024年01月17日
    浏览(39)
  • 用 LangChain 构建基于资料库的问答机器人(三):ReAct

    大家好,我是 Jambo。我们已经学习了如何使用 LangChain 的一些基本功能,解下我们就应该要结合这些功能来做一些复杂的东西了。但在这之前,为了让同学们更好的理解 LangChain 在这其中做了什么,我想先介绍一下关于 GPT 使用方面的一些知识。 在 ChatGPT 开放之初,除了各大公

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包