lingo3d可以允许web内使用3d元素,其定位是web端游戏引擎。跟随官方教程我完成了一个简单的demo,即控制小人在三维空间穿行,并且可以显示相应物品信息

官方使用vite+react,故我们跟随其搭建

1.搭建主场景

这里与一般react项目出入不大,其中public文件夹存放了大量3d模型与图片等,而我们的代码都在App.tsx中书写:


import { Cube,Editor, Model, ThirdPersonCamera, World } from "lingo3d-react"
import "./App.css"
const App = () => {return (<><World defaultLight="env.hdr" 【这是一种自带光源的图片文件,可以照亮环境】skybox="env.hdr"【默认光源和天空贴图都用的这种文件】><Model src="gallery.glb" scale={20} /><ThirdPersonCamera active mouseControl><Modelpbr 【将人物的模型类型强制转为pbr 这样就可以使光源点亮他】src="bot.fbx"animations={{idle:'idle.fbx',running:"running.fbx",falling:"falling.fbx"}}animation="idle"width={50} 【以下五行分别为平面宽,模型高,初始x,y,z】depth={50}    【初始xyz要使用editor调整查看坐标】x={243.19}y={-910.47}z={-577.26}/></ThirdPersonCamera></World>【Editor标签可以放在这】</>【react只能有一个根标签】)
}
export default App

这里要注意的是 Editor标签我已经注释掉了,它要放在world之外,由于官方已经做了修改,所以我们看到的editor视图与官方不一样,使用wasd可以直接控制编辑框事件,而官方较早的版本需要alt+鼠标拖动,这个卡了我一手哈哈哈,当时没意识到.等人物放好后就可以添加动画了

2添加动画

1状态管理工具下载 xstate 和 @xstate/reac

yarn add xstate @xstate/react

2.src新建状态机文件

这里看我的截图比较清楚,状态机相当于一个数据管理工具,类似reducer和vuex的东西,只是多了接收修改和状态检测的API

3主文件中引入:

定义pose和sendPose,其中usemachine还有第二个参数,是一个回调函数,稍后再说

在对应的model内,绑定pose.val到animation上即可,本文件使用的是ts 所以pose.val无法被视为字符串,需要加 as any

tips:关于jump中的entry

进入jumping后他会去找useMachine中第二个参数中的相应值,此时回调执行,我们之前用ref标记了机器人的Model,在model上加上向y跳起10,同时由于之前的physical属性让环境有重力了,故起跳后会下落,当下落到地面后发送landed指令

这里的onLoop也不是检测落地,而是定时器,当检测到y为0时,发送指令

3.添加交互事件

添加react动画包

1.使用blend3d解析3d模型 找到交互事件的模型名字并在对应标签内找到它 这次的目标是建筑内的一幅画name="a6_CRN.a6_0"<Model src="gallery.glb" scale={20} physics="map" ><Find name="a6_CRN.a6_0" outline = {mouseOver===true}onMouseOver={()=>setMouseOver(true)}onMouseOut={()=>setMouseOver(false)}>{mouseOver &&(<HTML><divstyle={{color:"white"}}><AnimText  duration={1000}>Artwork Title</AnimText><AnimText  duration={1000}>little bird</AnimText></div></HTML>)}
QQ录屏20220702184710.mp4</Find></Model>

2.为其添加鼠标事件控制外部线框和文字展示的显示,其中AnimText为第三方库提供的显示动画

3.准星

准星指明鼠标位置,永远指向相机中心,故放在舞台外面,准信位置由镜头位置决定,所以要调整镜头位置到适当位置,防止”准心对着屁股“的问题出现

4.看到目标后的镜头偏转可用hook参数决定,并绑定在相机上

相机位置绑定稳定spring参数,完成。

4 其他

环境美化

World标签可以添加一系列环境属性

ambientIcclusion 可以让环境光变得柔和

bloom都为暴光属性

详细可查api 稍后附上

outline相关属性是为world内模型添加边框属性后的边框样式

其中的图片为覆盖在边框内的蒙版

相机相关

本质是人物模型镶嵌在相机内,人物pbr属性可使人物与体积光产生效果,随环境变化亮度

physics属性使物理属性,当其下方无模型时自动下坠,下落速度暂未设置,与之配合的是在环境标签内添加的physics="map",而character也就是物件。 当 model跳出map后其重力效果仍然生效,需要设置空气墙防止出界 。(建模解决,添加标签过于耗费内存)

<Model src="gallery.glb" scale={20} physics="map" >

width与depth无效设置,模型大小不会随之改变

xyz为舞台内的一个坐标,可用editor查看,这里是选好的初始位置

关于指令与动作

keyboard与camera位于同一级,而非嵌套

其中按下w时检测ref是否绑定了值,有的话让其绑定的元素向前一定距离

与之不同 跳跃动作则由action控制,前文提到,它出现在useMachine的第二个参数内(是一个对象)

actions: {

enterJumping: () => {

console.log(">>>jumping")

const bot = botRef.current

if (bot === null) return

bot.velocity.y = 10

bot.onLoop = () => {

if (bot.velocity.y === 0) {

bot.onLoop = undefined

sendPose("LANDED")

}

}

}

}

关于浏览器设置,3d场景过于消耗GPU,故应当使用独立显卡加载,将浏览器默认加载项改为独立显卡 ,设置方式:

1.系统设置:同行设置(最下方)

2.点击浏览添加应用

3.将浏览器启动文件地址放入弹框地址栏,可通过浏览器快捷方式直接复制

5.点击添加完成设置

视频稍后上传 220706

视频展示

lingo3d实例1

lingo3d_基于官方教程的分析相关推荐

  1. 【2021/2/17发布适用】轻松在云服务器 Windows 上架设 ARK: Survival Evolved 的单地图基本服务端(基于官方教程)

    目录 零.前言 一.前置的准备 1.硬件配置(最低配置) 2.运行环境 二.安装过程 1.安装 .NET 4.0+ 2.安装 Steam CMD 3.安装 Ark: Survival Evolved ...

  2. 【2021/5/8发布适用】在 Windows 上架设 7 Days to Die 服务端(基于官方教程)

    目录 零.前言 一.前置的准备 1.硬件配置(最低配置) 2.运行环境 二.安装过程 3.安装 7 days to die 服务端 三.服务器 1.运行 2.配置 四.其它 零.前言 官方文档:htt ...

  3. tf.data官方教程 - - 基于TF-v2

    这是本人关于tf.data的第二篇博文,第一篇基于TF-v1详细介绍了tf.data,但是v1和v2很多地方不兼容,所以替大家瞧瞧v2的tf.data模块有什么新奇之处. TensorFlow版本:2 ...

  4. AI作曲基础-Python编程作曲软件篇-FoxDot文档及源码分析-官方教程01

    AI作曲基础-Python编程作曲软件篇-FoxDot文档及源码分析-官方教程01 前言 本系列系列目录放在文尾: 本系列是AI作曲的基础,暂时和AI关系不大,但尤为重要: 借助FoxDot,从文档分 ...

  5. 索尼爱立信st18i基于官方4.0.3再度修改更加顺畅 rom + 刷机教程

    本rom是基于官方4.0修改的,参考RayOniumICS.v5,主要进行简单的修改和一些优化,比原版的流畅更加适合国人使用. rom特性: 1.已加入root: 2.电量百分比显示: 3.加入重启选 ...

  6. 《SteamVR2.2.0官方教程(二)》(Yanlz+Unity+XR+VR+AR+MR+SteamVR+Valve+Tutorials+Interaction+Oculus+立钻哥哥++ok++)

    <SteamVR2.2.0官方教程> <SteamVR2.2.0官方教程> 版本 作者 参与者 完成日期 备注 SteamVR2.2.0_Tutorials_V01_1.0 严 ...

  7. UE官方教程笔记02-实时渲染基础下

    对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记 没听懂的地方就瞎写 反射 实时渲染中反射是一个非常有挑战的特性 UE中有多种不同的方案,各有各的优势和缺点 反射捕获 屏幕空间 ...

  8. TensorFlow2.0 Guide官方教程 学习笔记10- Eager execution

    本笔记参照TensorFlow官方教程,主要是对'Eager execution'教程内容翻译和内容结构编排,原文链接:Eager execution 目录 一.创建环境和基本使用 二.动态控制流 三 ...

  9. opencv python下载_[福利] OpenCV4 Python 最新中文版官方教程来了(附下载)

    教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...

  10. basler相机参数简要中文说明_附下载| OpenCV最新中文版官方教程

    OpenCV是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解OpenCV相关细节.教程根据官方提供的 ...

最新文章

  1. 基因组与数据整合:DNA应用开发正在临近
  2. 苏宁的另类“存在感”
  3. .NET 产品组问卷调查|和我们分享你的 .NET 使用情况
  4. AGC 26 F Manju Game
  5. plsql初始错误sql.net未正确安装_ANSYS | ansys18.0完整安装过程及常见问题解决方案[图文]...
  6. 移动端滚动不流畅问题
  7. FastSpring.NET V2.05 final 发布[集成Spring.net NHibernate Ajax]
  8. git拉取远程计算机上的代码 并 与本地进行比较(git fetch; git pull)
  9. Scratch二次开发——如何创建单独的Scratch作品展示页?
  10. 43. TA镜像文件的签名
  11. wav pcm格式文件解析
  12. PHP僵尸网络,byob--建立自己的僵尸网络
  13. Java游戏实验报告_java俄罗斯方块游戏实验报告.doc
  14. PDF编辑器技巧之PDF删除其中一页
  15. 点餐系统-----数据库设计
  16. 基于PHP+MySQL托管中心管理系统的设计与实现#计算机毕设
  17. 一文分析 Web3 尚未被主流采用的 6 个主要原因
  18. 基于Arduino平台dmp库+匿名四轴上位机测试MPU6050
  19. 2019秋招海康测试一面
  20. 云服务器可以换系统不,云服务器可以换系统吗

热门文章

  1. mysql条件触发器实例_mysql触发器实例一则
  2. querydsl动态 sql_JPA整合Querydsl入门篇
  3. matlab 积分进阶教程,matlab进阶微积分篇6
  4. RTSP/GB28181/SDK/EHOME协议视频智能分析共享平台EasyCVR安防视频云服务新增智能人脸识别功能
  5. Fast R-CNN算法
  6. c语言大地坐标转空间直角坐标,大地坐标转换直角坐标的C++代码(高斯克吕格投影)...
  7. 深圳CPDA数据分析认证:数据分析知识很难学么?
  8. tensorflow入门(一)波士顿房价数据集
  9. 国产WMS仓库管理系统排名
  10. python 实现 熵值法 确定指标权重