看Threejs好玩示例,学习创新与技术(React-three-fiber)

什么,竟有人把ThreeJS和React绑定在一起,混着用?

1、VUE劫持问题

暂先把今天的问题先放一边,先简单回顾下vue劫持的情况。vue会把data里面的数据自动转换为属性,方便界面与数据交互。这本身是没有任何问题,虽然DOM操作(如位置调整)会消耗一定的计算,但一般情况下还是可以接受的。

但到了三维渲染,情况就不同了。三维引擎并非采用缓存静态绘制(双缓冲技术)的技术,而是实时绘制。它会每秒30帧去请求三维场景的实体(Entity),如果三维场景被VUE托管成属性了,那就等于每帧都需要去请求一次getter函数。性能消耗是非常大的。

2、今天的示例效果

今天的示例的主角是一个狐狸,可以在《PS1-inspired Jitter Shader (tympanus.net)》中访问。右键可以让这个狐狸跑起来,也可以让狐狸变成马赛克状。

跑步可能没有什么特殊技术。但别着急,深入研究代码,会慢慢发现作者有几个技术创新。

聪明的你一定想到标题,那么技术创新一定包含React+ThreeJS的融合使用。是的,但是我们也应该清晰的认识到,框架这东西有好有坏。在坏的情况下,你无法从框架应用中学到任何东西,到头来被新框架抛弃。因此,我们今天先谈做法,再简单说说框架。

3、如何构建棋盘地面?

制作棋盘地面第一感觉是采用贴图,但该技术需要额外的贴图,有点不划算。另外还需要考虑地面移动的问题。本示例采用的是Shader技术,代码也简单,即根据Position设置A、B两种颜色,并且可以响应时间动画手机端的适配问题。

4、马赛克模型

一般的马赛克做法是后处理,是采用某点的颜色并替换为周边几个像素的颜色。但上图的效果不一样,有明显的三角尖锐化效果。

有了“三角尖锐化效果”做引导那么技术也是自然就容易发现。即在顶点着色器阶段,对顶点的位置进行偏移。代码如下:

gl_Position.xy /= gl_Position.w;
gl_Position.xy = floor(gl_Position.xy * uJitterLevel) / uJitterLevel* gl_Position.w;

上述代码可能难以理解的是为啥先要除以 gl_Position.w。这是因为gl_Position.w表示深度信息,即w是顶点距离相机的距离。w也可以理解为透视除法的因子。通过透视除法,得到归一化设备坐标(Normalized Device Coordinates, NDC)。此时,gl_Position.xy 的范围通常在 [-1, 1] 之间。

5、骨骼动画

我们日常接触的glTF模型一般是静态的,动态的glTF是什么样的呢?其中Animation存储了运动状态,比如跑步、停止,Armature存储了骨骼。

 6、React-three-fiber

最后回到本示例中引用的框架React-three-fiber,

React-three-fiber 是一个基于React 的 3D 渲染库,它将 three.js 的强大渲染能力与 React 的声明式编程模型相结合。使用 react-three-fiber,您可以使用 React 的组件化开发方式来创建复杂的 3D 场景,同时利用 React 的状态管理和生命周期钩子来控制场景的交互和动画。

简单的说该框架简化了一些复杂的ThreeJS的对象操作,比如下面的代码,可以非常清晰的明白在渲染Canvas中添加了一个Mesh,该Mesh是一个Box,并且采用标准的材质。 

总的来说,该框架可以减轻一部分的代码编程,给我们一些新的启发。不过也得辩证的看待该框架。该框架并非基础性、革命性的框架,采用HTML的组织模式跟JSON格式的场景组织都能达到相同的效果。因此如果你将使用该框架,先看看哪些是你最需要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543615.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

内网穿透(当使用支付宝沙箱的时候需要内网穿透进行回调)

内网穿透 一、为什么要使用内网穿透: 内网穿透也称内网映射,简单来说就是让外网可以访问你的内网:把自己的内网(主机)当做服务器,让外网访问 二、安装路由侠 路由侠-局域网变公网 (luyouxia.com) 安装成功如下: 三…

全栈开发(一):springBoot3+mysql初始化

1.开发环境准备 1.开发工具 2.jdk下载 官网下载java17 3.java环境变量配置 用户变量: ①.JAVA_HOME ②.path 4.mysql下载 b站随便搜 5.新建项目 6.maven配置 可以下载zip放到目录里 这里是配置好的 repository文件夹:为maven提供下载的文件存放…

Face++API调用

人脸检测API调用 import requests import json #将自己的KEY和Secret进行替换 API_KEYyour_API_KET API_SECRETyour_API_Secret# 人脸识别的URL URL https://api-cn.faceplusplus.com/facepp/v3/detect# 请求参数,需要什么参数传入什么参数 data {"api_key":API…

【LVIO-SLAM】SVD分解,最小二乘与EKF

【LVIO-SLAM】SVD分解与应用推导 1.1 线性最小而二乘1.2 SVD分解算法流程问题描述算法流程算法复杂度总结 1.3 非线性最小二乘1.4 EKF融合 KF/ EKF推导过程 1.1 线性最小而二乘 针对A是任意矩阵的话使用SVD分解求解,其中U是AA转置的特征值,V是AA转置A的特…

Python3 爬虫教程 - Web 网页基础

Web网页基础 1,网页的组成HTMLcssJavaScript2,网页的结构 3,节点树及节点间的关系4,选择器开头代表选择 id,其后紧跟 id 的名称。如:div 节点的 id 为 container,那么就可以表示为 #container 1…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台 Jenkins 是一个开源的自动化服务器,用于持续集成(CI)和持续交付(CD)软件项目。它允许开发人员在软件开发过程中自动化各种任务&…

进阶SpringBoot之集合 Redis

&#xff08;在跑 Redis 测试之前&#xff0c;需要先安装 Redis&#xff0c;并开启 Redis 服务&#xff09; Spring Boot 项目添加依赖 NoSQL -> Spring Data Redis pom.xml 文件如下 <dependencies><dependency><groupId>org.springframework.boot<…

【深度】为GPT-5而生的「草莓」模型!从快思考—慢思考到Self-play RL的强化学习框架

原创 超 超的闲思世界 2024年09月11日 19:17 北京 9月11日消息&#xff0c;据外媒The Information昨晚报道&#xff0c;OpenAI的新模型「草莓」&#xff08;Strawberry&#xff09;&#xff0c;将在未来两周内作为ChatGPT服务的一部分发布。 「草莓」项目是OpenAI盛传已久的…

得物App荣获新奖项,科技创新助力高质量发展

近日&#xff0c;备受瞩目的2024中国国际服务贸易交易会&#xff08;简称“服贸会”&#xff09;在北京盛大开幕&#xff0c;这一全球唯一的国家级、国际性、综合型服务贸易盛会再次汇聚了全球服务贸易领域的精英与前沿成果。服贸会由商务部和北京市政府携手打造&#xff0c;并…

常见框架漏洞复现

1、Thinkphp5x远程命令执行及getshell 1、环境配置 靶场:vulhub/thinkphp/5-rce docker-compose up -d 2、漏洞利用 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖&#xff0c;通过覆盖类的核心属性filter导致rce&#xff0c;其攻击点较为…

VMamba: Visual State Space Model 论文总结 + 源码解析

题目&#xff1a;VMamba: Visual State Space Model&#xff08;视觉状态空间模型&#xff09; 论文&#xff1a;[2401.10166] VMamba: Visual State Space Model (arxiv.org) 源码&#xff1a;https://arxiv.org/pdf/2401.10166 (github.com) 目录 一、摘要 二、引言 三、方…

全栈开发(四):使用springBoot3+mybatis-plus+mysql开发restful的增删改查接口

1.创建user文件夹 作为增删改查的根包 路径 src/main/java/com.example.demo/user 2.文件夹里文件作用介绍 1.User(实体类) package com.example.demo.user; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.IdType; impo…

计算机毕业设计之:基于微信小程序的疫苗预约系统的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

2024全球超模大赛(北京|山东|内蒙三城联动)顺利举办

近日&#xff0c;2024 全球超模大赛&#xff08;北京|山东|内蒙&#xff09;三城联动暨新国潮文化赛事主题发布会在紫薇美力集团国贸鲁采赋盛大举行。此次发布会旨在鼓励优质模特共同传播中国传统文化&#xff0c;让其在全球范围内绽放光彩&#xff0c;展现中国人的骄傲与风采&…

【我的 PWN 学习手札】House of Botcake —— tcache key 绕过

参考自看雪课程&#xff1a;PWN探索篇 前言 我们知道&#xff0c;自对 tcachebin 添加了 key 进行了 double free 检查后&#xff0c;利用起来薛微有些困难。double free 绕过检查机制&#xff0c;实则是因为释放时会检查 tcachebin 对应 size 的所有 free chunk。那么如果第二…

【牛客网刷题记录】【java】链表

&#xff08;1&#xff09;反转链表 链接 可以说是最经典的链表题目之一&#xff0c;并且很多人经常会记不得怎么做。 但大致思路是比较简单的&#xff0c;重点就是如何用指针对链表进行反转的同时还不能丢失链表。不可避免的就是需要一个指针指向已经反转的部分&#xff08;p…

2024个人简历模板免费可编辑,可能是整理最全的简历(支持Word格式下载)

提供各行业简历模板WORD可编辑格式下载&#xff0c;涵盖求职简历模板、大学生简历模板、个人简历模板、留学简历模板、英文简历模板、免费简历模板、工作简历模板、保研简历模板、暑期实习简历、寒假实习简历、校招简历等。 都是word格式&#xff0c;直接下载就能用。 网盘链…

【CNKI/CPCI检索,本周召开】2024现代教育、人文与艺术国际会议(MEHA2024)

会议日期&#xff1a;2024年9月27-29日 会议地点&#xff1a;中国-郑州市 【主办单位】 国际应用科学与技术协会(IAAST) 【主讲嘉宾】 【论文出版与检索】 一、大会将围绕会议主题进行论文征集与遴选&#xff0c;所有投稿都必须经过2-3位组委会专家审稿。所有录用论文将发表…

无法访问zenodo.org解决方案-window系统

1.zenodo功能 科研数据库Zenodo&#xff1a;用于存储和分享科学研究成果&#xff1a;用户可以将科研论文、数据集、软件代码、预印本、技术报告等各种科研成果上传至Zenodo平台&#xff0c;进行存储和分享。 2.查询zenodo.org的ip地址 用站长之家网站&#xff1a;http://ip.…

【已解决】键盘输入数字-使用JAVA语言实现键盘输入的数字再通过快速排序算法输出

文章目录 一、前言任务描述相关知识分治策略&#xff1a;编程要求测试说明 二、具体代码实现总结 一、前言 —快速排序 任务描述 在待排序的n个元素中任取一个元素&#xff08;通常取第一个元素&#xff09;作为基准&#xff0c;把该元素放入最终位置后&#xff0c;整个数据序…