lingo3d_基于官方教程的分析

article/2025/6/23 8:22:59

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


http://chatgpt.dhexx.cn/article/nPEdv1p4.shtml

相关文章

Lingo软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Lingo是一款专门为解决线性和非线性优化问题而设计的专业软件&#xff0c;广泛应用于运筹学、工程管理、交通管理、生产调度、物流管理等领域。它提供了一个易于使用的界面和灵活的求解器&#xff0c;能够高效地求解大规模的线性…

数学建模学习(25):一夜整理的Lingo入门教程,助力建模国赛!

文章目录 前言使用教程基本语法影子价格敏感性分析以上总结变量约束与函数全局最优解(最值)局部最优解(极值)总结前言 在上一篇文章我用到了lingo,但我盲猜一下大家可能不会用lingo做数学计算,因此我在这里做一个教程。 使用教程 下载地址:微信软件管家。 假设已经写…

java调用lingo实例_LINGO使用教程(一)

LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 1.LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了…

c语言程序框图示范,C语言程序框图courseware.ppt

第3章控制结构&#xff1b;目录; ●基本要求: 1)熟悉C语言程序结构框图&#xff1b; 2)熟悉C语言的两分支结构&#xff0c;多分支结构和循环结构&#xff1b; 3)熟悉结构化程序设计方法. ●学习要点: 1)流程图&#xff0c;NS图&#xff0c;循环结构&#xff1b; 2)结构化程序设…

C语言经典100例-9

c语言经典100例 题目&#xff1a;要求输出国际象棋棋盘。 程序分析&#xff1a;国际象棋棋盘由64个黑白相间的格子组成&#xff0c;分为8行*8列。用i控制行&#xff0c;j来控制列&#xff0c;根据ij的和的变化来控制输出黑方格&#xff0c;还是白方格。 如果出现乱码情况请参…

C语言程序设计100个经典例子

<1>数字排列。 #include <stdio.h> int main() {int sum 0;for(int i 1; i< 5; i){for(int a 1; a< 5; a){for(int b 1; b< 5; b){if(i!a && i!b && a!b){printf("%d%d%d", i, a, b);putchar(\n);sum sum 1;}}}}printf("%…

eclipse的简介

1.打开eclipse软件 2.新建工程 file -> new ->java Project

Eclipse开发工具--简介

简介 Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言&#xff0c;它只是提供了一个基础的底层支持&#xff0c;而后针对于不同的编程语言都会提供有相应的插件支持。 Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境&am…

Java-2学习之Eclipse简介

源码编写的时候需要用编辑器&#xff0c;这里介绍下Eclipse。 1. 手动编译执行 在介绍之前&#xff0c;我们先手动执行一个java文件&#xff0c;了解下java编译执行的过程。 首先用笔记本工具编辑一个HelloJava.java文件&#xff0c;内容如下&#xff1a; public class Hel…

eclipse的使用简介

Java开发工具的之eclipse的使用 eclipse简介 接着上篇&#xff0c;进入到eclipse主界面之后&#xff0c;我们常用的视图包含下图所示的四部分&#xff1a; 注&#xff1a;当我们不小心将eclipse中的视图关闭后&#xff0c;想再次使用该视图时&#xff0c;可以单击eclipse菜单栏…

Eclipse简介和插件开发

Eclipse 是一个很让人着迷的开发环境&#xff0c;它提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。目前网上流传相当丰富且全面的开发工具方面的插件&#xff0c;但是Eclipse已经超越了开发环境的概念&#xff0c;可以想象Eclipse将成为未来的集…

Eclipse 简介和插件开发示例 (IBM的文章)

Eclipse 是一个很让人着迷的开发环境&#xff0c;它提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。目前网上流传相当丰富且全面的开发工具方面的插件&#xff0c;但是Eclipse已经超越了开发环境的概念&#xff0c;可以想象Eclipse将成为未来的集…

Eclipsej简介

Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。 Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多…

Eclipse简介、安装及常用快捷键

导航 我们为什么需要Eclipse&#xff1f;Eclipse简介与Eclipse基金会Eclipse下载安装1.下载2.安装2.1 安装JAVA EE插件 3.选择工作空间 Eclipse简单编辑与调试1.新建一个项目2.创建包Package3.创建类Class5.运行6.控制台7.调试8.Bug名称的由来 Eclipse安装插件Install New Soft…

Eclipse和MyEclipse简介

1.Eclipse 最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境&#xff0c;2001年11月贡献给开源社区&#xff0c;现在它由非营利软件供应商联盟Eclipse基金会管理。 Eclipse还包括插件开发环境&#xff08;Plug-in Decelopment Enviroment,PDE&#…

【Eclipse】--Eclipse简介和安装

工欲善其事必先利其器&#xff0c;作为堂堂的Java高级开发人员&#xff0c;对Eclipse的使用绝对不能是菜鸟级别的。不怕不知道&#xff0c;就怕不知道&#xff0c;有点时间&#xff0c;把Eclipse好好的了解一下。 Eclipse是什么&#xff1f; Eclipse是一种通用工具平台——普遍…

eclipse的简介安装与配置

eclipse概述 开发工具 记事本、加强记事本集成开发环境: 集成开发环境的分类: Eclipse、idea、Myeclipse Eclipse下载 www.eclipse.orgDownload---->download packags--->选择版本(最新版本)--->developers For javeEE --->windows 64bit ------>选择中国镜像…

简介 eclipse

IBM-Eclipse简介: eclipse-galileo Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。 I…

Ubuntu安装pcb制图工具

sudo add-apt-repository --yes ppa:kicad/kicad-5.1-releases sudo apt update sudo apt install --install-recommends kicad 在这里插入图片描述 sudo apt install kicad-demos 安装完成之后运行 kicad 如下所示 本文链接&#xff1a;https://blog.csdn.net/u011046042/ar…

AxGlyph矢量绘图软件 | 绘图软件

文章目录 AxGlyph矢量绘图软件安装教程 所见即所得滚动式符号面板&#xff0c;多底色、面板符号定制和分页顺序调整格式化图形&#xff0c;通过节点控制可获取丰富的变形支持自由矢量画笔、混合矢量路径和矢量漫水填充整合精简版的AxMath*&#xff0c;可方便的在图形中嵌入数学…