我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React-three-fiber使用初体验

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React-three-fiber使用初体验

React-three-fiber

npm init -y
npm install react@18 react-dom@18.2 react-scripts@5.0

在package.json

  "scripts": {
    "dev": "react-scripts start",
    "build": "react-scripts build",
    }

新建public和class="lazy" data-src文件夾 分別新建index文件

class="lazy" data-src/index.js
import { createRoot } from "react-dom/client";
import "./style.css";
// 拿到root节点
const root = createRoot(document.querySelector("#root"));

安装R3F包和three.js依赖

npm install three@0.145 @react-three/fiber@8.8

@react-three/fiber@8.8 中@react-three是一个大的scope 从这个scope中拿到fiber这个包

  <>
    <group>
      <mesh position={[1, 2, 3]} rotation-x={0.5}>
        {}
        <boxGeometry></boxGeometry>
        <meshBasicMaterial color="red" />
      </mesh>
      <mesh>
        <sphereGeometry></sphereGeometry>
        <meshBasicMaterial color="red" />
      </mesh>
    </group>
    {}
  </>

自动生成的组件要写成驼峰 所以R3F提供的组件要写成驼峰形式

自己定义的组件要写成首字母大写的

引入canvas

canvas会继承父级的大小

#root {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

和three.js的区别

没有创建scene webGLRenderer 透视相机

scene没有被渲染

锯齿 encoding等设置都配置好了

物体自动放在中间

resizing是自动配置好的 响应式

无需引入mesh 几何体和材质

无需给torusKnotGeometry提供特定的值

    <Canvas>
      <mesh>
        <torusKnotGeometry />
        <meshNormalMaterial />
      </mesh>
    </Canvas>

使用hook

对于几何体 配置constructor中的参数需要在标签args属性中写

对于材质 可以写在args里 也可以直接作为标签属性

缩放的时候操作mesh的scale 而不是几何体参数 为了性能

     <mesh position={[2, 0, 0]} scale={1.5}>
        <sphereGeometry args={[1.5, 32, 32]} />
        <meshBasicMaterial color="mediumpurple" wireframe />
      </mesh>

写数值Number类型的值要用花括号包裹

  <mesh position-x={2} scale={1.5}>

useFrame

不管当前的帧速度是多少,useFrame都会被调用

接收两个参数

  • state 里面有camera和clock等
  • delta 1帧花费的时间

做动画、旋转,直接操作mesh

  • 直接操作mesh 使用useRef
  • 在useFrame中使用rotation 和 delta

OrbitControls

OrbitControls不是three.js内置的类 所以要引入它再转为声明式的

extend用来将three.js的class转为声明式的,可以在jsx中使用

import { useThree, extend, useFrame } from "@react-three/fiber";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
extend({ OrbitControls }); //orbitControls在jsx中使用的名称

OrbitControls需要传入camera和renderer.domElement:使用useThree这个hook 它返回的对象包含相机和renderer,用解构取出

  const { camera, gl } = useThree();
 return (
    <>
     <orbitControls args={[camera, gl.domElement]} />//注意这里是小写开头
	</>
	)

Lights

注意Basic材质对光没有反应

处理阴影部分:增加环境光

自定义几何体

抽出组件

定义Float32数组

将bufferAttribute添加到bufferGeometry(嵌套的形式) 指定这个属性式position属性(属性的形式)

export default function CustomObject() {
  const verticesCount = 10 * 3; //要10个三角形 每个三角形有3个顶点
  const position = new Float32Array(verticesCount * 3); //每个顶点有3个值 x y z
  for (let i = 0; i < verticesCount * 3; i++) {
    position[i] = (Math.random() - 0.5) * 3; // * 3为了让三角形不那么小
  }
  return (
    <mesh>
      <bufferGeometry>
        <bufferAttribute
          attach="attributes-position"
          count={verticesCount}
          itemSize={3}
          array={position}
        />
      </bufferGeometry>
       <meshBasicMaterial side={THREE.DoubleSide} />
      //将材料设置为双面都可见
    </mesh>
  );
}

性能优化 useMemo

meshStandardMaterial

计算法线 并传递给meshStandardMaterial

  • 引入useRef 绑定在几何体上
  • 取到几何体,并取其中的computeVertexNormals()
  • 以上步奏要在useEffect上执行 确保挂载之后有了几何体再执行代码

camera设置

要让相机做圆周运动

需要在x,z轴上移动

取到已经过去了多少时间 state.clock.getElapsedTime 作为角度

render设置

色调映射

ToonMapping是一种假的 高动态范围HDR到低动态范围

让颜色像HDR一样

    <Canvas
      gl={{
        antialias: true,
        toneMapping: THREE.ACESFilmicToneMapping,
        outputEncoding: THREE.sRGBEncoding,//色调编码 更好地存储颜色 最好使用sRGBEncoding
      }}
      //使用正交相机
      // orthographic
      camera={{
        fov: 45,
        near: 0.1,
        far: 200,
        position: [2, 3, 3],
      }}
    >

在css中

#root {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    
    background: lightblue;
}

R3F自动处理像素比 这可以避免性能问题

以上就是React-three-fiber使用初体验的详细内容,更多关于React-three-fiber使用的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React-three-fiber使用初体验

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

React-three-fiber使用初体验

这篇文章主要为大家介绍了React-three-fiber的使用初体验,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-19

Exchange 2007使用初体验(3

大家可以看到,在Exchange 2007中,邮箱的种类多了很多,在这里我们只是选择默认的“用户邮箱”,然后点“下一步”: 如果该用户在AD中已存在,那么请选“现有用户”,并点击“浏览”,我在这里选择“新建用户”,因为我想看看Exchang
2023-01-31

React超详细讲述Fiber的使用

在fiber出现之前,react的架构体系只有协调器reconciler和渲染器render。当前有新的update时,react会递归所有的vdom节点,如果dom节点过多,会导致其他事件影响滞后,造成卡顿。即之前的react版本无法中断工作过程,一旦递归开始无法停留下来
2023-02-08

react-three/postprocessing库的参数如何使用

这篇文章主要讲解了“react-three/postprocessing库的参数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react-three/postprocessing库的
2023-06-30

初体验阿里云ECS使用

随着互联网技术的发展,越来越多的企业和个人开始使用云计算服务,阿里云ECS(ElasticComputeService)就是其中之一。阿里云ECS提供了一种弹性扩展的计算服务,可以根据业务需求动态调整资源,提高计算效率,降低成本。本文将详细描述初体验阿里云ECS使用的过程,帮助初学者快速上手。一、阿里云ECS的简
初体验阿里云ECS使用
2023-10-30

Avue 组件库的使用初体验

这篇文章主要为大家介绍了Avue 组件库的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

腾讯性能测试工具——PerfDog使用初体验

下午莫名收到一条短信,得知腾讯出了个新的测试工具,主要针对的是移动端的性能测试,便顿时来了兴趣。官网地址:https://perfdog.qq.com/使用说明:https://perfdog.qq.com/support测试机型:锤子坚果
2023-06-05

dedecms 5.6 初始化数据体验包本地测试安装使用方法

下面是具体的安装方法:本地127.0.0.1 不能远程获取我们先在下面地址下载: 如果是gbk则下载 hwww.cppcns.comttp://www.dedecms.com/demodata/dedev56demo.zip UTF-8下载
2022-06-12

React里的Fragment标签的具体使用

本文主要介绍了React里的Fragment标签的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-31

NLP Baichuan-13B-Chat模型使用体验

NLP Baichuan-13B-Chat模型是一个基于大规模预训练语言模型的对话生成模型。使用这个模型进行聊天体验时,我发现以下几点:1. 对于一般性的问题,模型给出的回答通常是准确的,能够提供有帮助的信息。例如,当我询问一个关于天气的问
2023-10-11

阿里云ECS使用体验感受

简介阿里云ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,可以帮助用户快速构建和部署应用程序。在本文中,我将分享我在使用阿里云ECS时的一些体验和感受。1.弹性和灵活性阿里云ECS提供了强大的弹性和灵活性,可以根据实际需求随时调整计算资源。无论是需要增加或减少服务器数量,还是调整服务
阿里云ECS使用体验感受
2024-01-30

django验证系统的具体使用

本文主要介绍了django验证系统的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-21

编程热搜

目录