iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React-three-fiber使用初体验
  • 772
分享到

React-three-fiber使用初体验

React-three-fiber使用React-three-fiber初体验 2023-05-19 08:05:47 772人浏览 泡泡鱼
摘要

目录React-three-fiber引入canvasuseFrameLightscamera设置React-three-fiber npm init -y npm install

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和src文件夾 分別新建index文件

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使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: React-three-fiber使用初体验

本文链接: https://www.lsjlt.com/news/212687.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • React-three-fiber使用初体验
    目录React-three-fiber引入canvasuseFrameLightscamera设置React-three-fiber npm init -y npm install ...
    99+
    2023-05-19
    React-three-fiber使用 React-three-fiber初体验
  • Exchange 2007使用初体验(3
    大家可以看到,在Exchange 2007中,邮箱的种类多了很多,在这里我们只是选择默认的“用户邮箱”,然后点“下一步”: 功能虽然一样,但界面明显比在“AD用户和计算机”中更加的漂亮和合理。填写好相应的信息以后,点“下一...
    99+
    2023-01-31
    初体验 Exchange
  • 初体验阿里云ECS使用
    随着互联网技术的发展,越来越多的企业和个人开始使用云计算服务,阿里云ECS(Elastic ComputeService)就是其中之一。阿里云ECS提供了一种弹性扩展的计算服务,可以根据业务需求动态调整资源,提高计算效率,降低成本。本文将...
    99+
    2023-10-30
    阿里 初体验 ECS
  • Avue 组件库的使用初体验
    目录1. 使用的初体验2. 不好的地方 1. 使用的初体验 今天给大家讲一下我最近发现的比较冷门的一个组件库,但是功能还是蛮多,这里就给大家介绍一下 , 网址也给大家放在这里 &nb...
    99+
    2022-11-13
    Avue 组件库 Avue 组件
  • react-three/postprocessing库的参数如何使用
    这篇文章主要讲解了“react-three/postprocessing库的参数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react-three/postprocessing库的...
    99+
    2023-06-30
  • React超详细讲述Fiber的使用
    目录Fiber概念结构Fiber树的遍历是这样发生的深度遍历window.requestIdleCallback()requestAnimationFrameFiber是如何工作的结...
    99+
    2023-02-08
    React Fiber原理 React Fiber优点 React Fiber
  • 在Vue3中使用BabylonJs开发 3D的初体验
    目录开始安装 Vue3安装 BabylonJs创建 Vue 组件: BabylonOne.vue创建 Babylon 类渲染场景修改 CSS 并添加相机和灯光结尾随着前端的发展,在 ...
    99+
    2024-04-02
  • 在 JavaScript React 中使用 Hooks:提升开发体验
    简化状态管理 传统上,React 组件通过构造函数管理状态,这可能会导致冗长的代码和难以维护的组件。Hooks 提供了两个核心钩子 useState 和 useEffect,分别用于管理组件状态和副作用。 useState 钩子接受一个初...
    99+
    2024-04-02
  • react-three/postprocessing库的参数中文含义使用解析
    目录一、react-three/postprocessing--处理效果的库二、提供的组件<DepthOfField />景深效果组件参数<Bloom /> ...
    99+
    2024-04-02
  • 腾讯性能测试工具——PerfDog使用初体验
    下午莫名收到一条短信,得知腾讯出了个新的测试工具,主要针对的是移动端的性能测试,便顿时来了兴趣。官网地址:https://perfdog.qq.com/使用说明:https://perfdog.qq.com/support测试机型:锤子坚果...
    99+
    2023-06-05
  • Cannal初体验:使用Docker安装Canal详细流程说明
    文章目录 Cannal安装步骤1.通过docker创建一个新网络2.mysql相关2.1 开启mysql主从配置1、修改配置文件2、重启mysql 2.2 新建canal用户并设置权限...
    99+
    2023-10-01
    docker spring boot mysql linux
  • React中useRef的具体使用
    相信有过React使用经验的人对ref都会熟悉,它可以用来获取组件实例对象或者是DOM对象。 而useRef这个hooks函数,除了传统的用法之外,它还可以“跨渲染周期”保存数据。 ...
    99+
    2024-04-02
  • 怎么用React 360创建虚拟现实体验
    本篇内容介绍了“怎么用React 360创建虚拟现实体验”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!正文...
    99+
    2024-04-02
  • golang系统使用体验分享
    文章内容如下: 标题:深入探索golang系统使用体验分享 作为一种高效、简洁、性能出色的编程语言,Go(又称Golang)在近年来逐渐受到广泛关注和应用。作为一个热爱技术的开发者,我...
    99+
    2024-02-28
    系统 golang 体验 go语言 网络编程 标准库
  • React里的Fragment标签的具体使用
    目录<></>包裹多个元素↓: 使用Fragment标签↓:<></>和Fragment标签的区别rea...
    99+
    2023-01-31
    React Fragment标签 React Fragment React.Fragment
  • React自定义Hook-useForkRef的具体使用
    目录开篇思路实现自定义 Hook - useForkRef开篇 使用过 React 技术栈的同学相信都使用过 ref 传递给 render 中的元素,而在使用 React 封装组件时...
    99+
    2024-04-02
  • 阿里云ECS使用体验分享
    阿里云ECS( Elastic ComputeService)是阿里云推出的一项云计算服务,可让用户快速、方便地创建和管理云端服务器。本文将对阿里云ECS的使用体验进行详细介绍。 近年来,随着云计算技术的发展,越来越多的企业和个人开始关注并...
    99+
    2023-12-12
    阿里 ECS
  • django验证系统的具体使用
    目录user对象创建用户创建超级用户更改密码验证用户web请求认证用户如何登陆用户如何登出限制对未登录用户的访问LoginRequired Mixinuser对象 用户对象是认证系统...
    99+
    2023-03-21
    django 验证系统
  • 阿里云服务器使用体验
    阿里云服务器是一款云服务器软件,它的使用体验因服务器而异。以下是一些可能会影响其使用体验的因素: 性能和容量:阿里云服务器通常比您使用的本地服务器更快和更稳定。它们的处理器、内存、存储等硬件配置也更高,因此您的数据处理速度可以更快。 可...
    99+
    2023-10-26
    阿里 服务器
  • Vue3 - setup script的使用体验分享
    目录前言使用导出变量&方法使用组件使用props - defineProps使用emits - defineEmit使用context - useContext指令总结前言 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作