Flutter + Three.js (WebView)实现桌面端3d模型展示和交互
文章目录
- flutter(桌面端)瓶颈
- 一、Flutter+three.js
- 二、Flutter+three.js 实现思路
- 1.在Flutter 中使用webview 进行嵌套
- 2.开启上面嵌套的页面地址
- 2.在含有three.js 的html 中引入模型
- 3.两个页面之间进行通信,如图:
- 总结
flutter(桌面端)瓶颈
Flutter 本身并不直接支持 3D 桌面应用程序的开发 ,Flutter 使用的是自己的渲染引擎(Skia),它旨在高效地处理 2D 绘制和界面构建,而不是 3D 图形渲染。Skia 是一个强大的 2D 渲染库,但它没有为复杂的 3D 场景优化,因此 Flutter 本身对 3D 的支持较弱。因此如果想在flutter 中实现3d模型并实现交互,则需要用别的方式。
一、Flutter+three.js
这种方式,我是比较推荐的,如果你是前端的开发者,用这种方式,可以很快的上手实现。先来看一下整体的视频效果: 视频效果
图片效果:

即:用不同的按钮控制模型的样式,一个按钮是为模型添加皮肤,一个按钮是可以正向旋转模型,一个按钮是可以反向旋转模型,另一个按钮是可以在模型的指定位置添加自己定义的数字。
占用的性能:

二、Flutter+three.js 实现思路
1.在Flutter 中使用webview 进行嵌套
这个方法就好比前端的iframe 一样,即页面中嵌套页面,具体的部分代码结构如下:

2.开启上面嵌套的页面地址
如果你有vscode ,可以用快捷的开启方式:

这样子就可以开启以这个页面为服务的地址,为啥要用这种方式呢?而不直接点击呢,因为如果你直接使用点击的话,可能有些资源加载不出来,若果你没有vscode,你也可以用node,或者java 命令行来开启服务。
2.在含有three.js 的html 中引入模型
如图:

这边你需要提供一下模型的obj,或者别的方式,可以从uniyt 中去生成,也可以从Blender 可以用于创建 3D 模型,并将模型导出为常用的 3D 文件格式,比如 OBJ 或 FBX,如果没有这方面的知识,可以试着从网上找一些模型先代替一下。
3.两个页面之间进行通信,如图:
在flutter 中发送命令:

在three.js的页面中接受发出的信号:

总结
这里只是展示了一种方式,其实还有很多的方式可以实现桌面端的3d,例如:
(1)Flutter + Unity (flutter_unity_widget),通过 flutter_unity_widget 插件,将 Unity 的内容嵌入到 Flutter 应用中,并在桌面端显示。
(2)Flutter + OpenGL:可以使用 flutter_gl 或 dart:ffi(外部函数接口)来调用本机的 OpenGL 库,并在 Flutter 桌面应用程序中展示 3D 模型。这种方式需要通过 OpenGL 直接在窗口中绘制 3D 场景。
只要勤加思考,肯定是都有方法去解决的,没有解决不了的事情,只有不会解决的人。
如需项目demo,微信扫下面的二维码,注册成功,到下面的我的-联系客服 问我要代码

相关文章:
Flutter + Three.js (WebView)实现桌面端3d模型展示和交互
文章目录 flutter(桌面端)瓶颈一、Flutterthree.js二、Flutterthree.js 实现思路1.在Flutter 中使用webview 进行嵌套2.开启上面嵌套的页面地址2.在含有three.js 的html 中引入模型3.两个页面之间进行通信,如图: 总结 flutter(桌面端)瓶颈 Flutter 本身…...
学习日志35
拆卸线问题(Disassembly Line Balancing Problem, DLBP)是生产工程和运筹学中的一个特殊问题,它涉及到将废弃产品有效地拆解成可回收利用的部件和材料。随着环保意识的增强和资源回收技术的发展,DLBP逐渐成为研究的热点。这类问题…...
http cache-control
Cache-Control 是 HTTP 协议中用于控制缓存行为的重要头部字段。它定义了客户端和服务器端如何缓存资源,以及缓存的有效期。以下是关于 Cache-Control 的详细解释: 请求指令 max-age 指示客户端接受的响应最大年龄。如果缓存的响应超过这个年龄&#x…...
kubernetes 中的微服务
微服务:用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 - Service是一组提供相同服务的Pod对外开放的接口。 - 借助Service,应用可以实现服务发现和负载均衡。 - service默认只支持…...
电脑无法无线投屏的解决办法
在前司的时候经常遇到电脑无法使用无线投屏器的情况,今天就来聊聊如何解决。 1.不会连接。这种情况,经常发生在WIN10升级WIN11之后,一般是两种办法,一种是同时按键盘上的WINDOWS和K键,右下角就会出来连接的图标&#…...
【多重循环在Java中的应用】
多重循环在Java中的应用 介绍 多重循环是将一个循环嵌套在另一个循环体内的编程结构。Java中的 for、while 和 do...while 循环均可作为外层循环和内层循环。建议使用两层嵌套,最多不超过三层,以保持代码的可读性。 在多重循环中,外层循环执…...
JVM(Java Virtual Machine) 详解
1. JVM 内存区域划分 一个 Java 写的程序,跑起来就得到了一个 Java 进程(资源分配的基本单位) JVM 上面运行的字节码指令 1) 程序计数器(比较小的空间),保存了下一条要执行的指令的地址 这个不是 CPU 的…...
【进阶OpenCV】 (4)--图像拼接
文章目录 图像拼接1. 读取图片2. 计算图片特征点及描述符3. 建立暴力匹配器4. 特征匹配5. 透视变换6. 图像拼接 总结 图像拼接 图像拼接是一项将多张有重叠部分的图像(这些图像可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分…...
pg if条件语句
1.语法: 2.区别 IF 语句: 只能在 PL/pgSQL 中使用,不适合在直接的 SQL 查询中使用。没有返回值,仅仅是控制逻辑流程。适合用在存储过程、函数和触发器中。 CASE 语句(在 PL/pgSQL 中): 可以在 P…...
Pikachu-unsafe upfileupload-getimagesize
什么是getimagesize()? getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造,如果用这个函数来获取图片类型,从而判断是否时图片的话ÿ…...
SOA是什么
SOA SOA 即 Service-Oriented Architecture(面向服务的架构)。 一、定义 SOA 是一种软件设计方法和架构理念,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来。这些服务可以独立部署、独立运…...
构建高效团队,内部CRM系统的益处详解
内部CRM系统的最大优势之一是它能够集中并系统化客户信息,包括联系方式、购买历史、偏好设置、服务记录等。这种集中式的数据管理使企业能够快速响应客户需求,预测客户行为,提供个性化的服务或产品。更重要的是,它有助于建立一个统…...
Linux文件属性
Linux 文件基本属性 为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限: - chown (change owner) &#…...
什么是Anaconda
目录 1. [什么是Anaconda](#什么是Anaconda) 2. [安装Anaconda](#安装Anaconda) - [检查系统](#检查系统) - [下载Anaconda](#下载Anaconda) - [安装Anaconda](#安装Anaconda) 3. [启动Anaconda Navigator](#启动Anaconda-Navigator) 4. [创建与管理环境](#创建与管理环…...
ubuntu24开启启动脚本
因为我是在之前装的是windows和ubuntu双系统,所以想在ubuntu中自动挂载和开启时做些自己的脚本处理开发环境。 我的脚本如下: truedei@truedei-code:~$ cat mount.shsudo umount /media/truedei/*#sudo ntfsfix /dev/sda3 #sudo ntfsfix /dev/sda4 #sudo ntfsfix /dev/sda5…...
流浪地球行星发动机
随着电影《流浪地球2》的热播,影片中的行星发动机构想激发了社会各界对科幻与未来科技的广泛讨论。本文深入剖析了行星发动机的科学原理,包括重力助推、行星转移轨道以及重核聚变等核心技术,揭示了其在推动地球逃离太阳系过程中的关键作用。通…...
云岚到家,使用Elasticsearch实现服务的搜索功能,使用Canal+MQ完成服务信息与ES索引同步。MQ
为什么使用elasticsearch?数据很多么? 项目使用Elasticsearch是实现了门户上对服务的搜索。 平台上的服务数据是并不是很多,全国所有区域下的服务信息加一起几千条,之所以使用Elasticsearch是因为: 1、公司架构师在系统架构时…...
【图论】迪杰特斯拉算法
文章目录 迪杰特斯拉算法主要特点基本思想算法步骤示例 实现迪杰斯特拉算法基本步骤算法思路 总结 迪杰特斯拉算法 迪杰特斯拉算法是由荷兰计算机科学家艾兹赫尔迪杰特斯拉(Edsger W. Dijkstra)在1956年提出的,用于解决单源最短路径问题的经…...
四、Python基础语法(数据类型转换)
数据类型转换就是将一种类型的数据转换为另外一种类型的数据,数据类型转换不会改变原数据,是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…...
工业物联网的安全与隐私保护—SunIOT
【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。一站式数智工厂解决方案服务商】 在当今数字化的时代,工业物联网(IIoT)正以前所未有的速度改变着工业生产的模式和效率。然而,随着工业物联网的广泛…...
如何使用 Graphviz 在 5 分钟内创建专业流程图:Python 数据可视化终极指南
如何使用 Graphviz 在 5 分钟内创建专业流程图:Python 数据可视化终极指南 【免费下载链接】graphviz Simple Python interface for Graphviz 项目地址: https://gitcode.com/gh_mirrors/gr/graphviz 想要快速创建专业流程图吗?Graphviz 是一个强…...
Fansly下载器完整指南:3分钟掌握免费离线下载技巧
Fansly下载器完整指南:3分钟掌握免费离线下载技巧 【免费下载链接】fansly-downloader Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content offline anyt…...
QMCDecode终极指南:3步搞定QQ音乐加密文件,让音乐真正属于你
QMCDecode终极指南:3步搞定QQ音乐加密文件,让音乐真正属于你 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录…...
从DICOM到3D打印:手把手教你用3D Slicer处理医学影像全流程(含STL导出)
从DICOM到3D打印:医学影像处理全流程实战指南 在数字化医疗时代,将CT、MRI等医学影像转化为可触摸的3D打印模型,正在成为临床教学、手术规划和医患沟通的革命性工具。这套技术链条中最关键的桥梁,正是开源的3D Slicer平台——它能…...
你的打印机“糊”了?可能是半色调没调好!详解HP/佳能/Epson的驱动设置与图像预处理
你的打印机“糊”了?可能是半色调没调好!详解HP/佳能/Epson的驱动设置与图像预处理 当精心修图的照片在打印机上输出后出现奇怪的网格纹路,或是设计稿的渐变区域出现明显色阶断层时,多数用户的第一反应往往是怀疑打印机硬件故障。…...
AMD GPU本地AI模型部署终极指南:ollama-for-amd让你的Radeon显卡焕发新生
AMD GPU本地AI模型部署终极指南:ollama-for-amd让你的Radeon显卡焕发新生 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/…...
从零封装一个MCP4728的C语言驱动库:支持STM32/HAL库,含EEPROM读写状态处理
构建高可靠MCP4728驱动库:STM32 HAL库实战与EEPROM状态管理 在嵌入式开发中,DAC(数模转换器)是连接数字世界与模拟世界的关键桥梁。MCP4728作为Microchip公司推出的4通道12位I2C接口DAC芯片,凭借其内置EEPROM存储和灵活…...
ADAU1452/1467硬件设计避坑:手把手教你从原理图到SigmaStudio的通道映射(含AD1938实例)
ADAU1452/1467硬件设计实战:从原理图到SigmaStudio的通道映射全解析 在嵌入式音频系统设计中,ADAU1452和ADAU1467作为业界广泛使用的数字信号处理器,其硬件接口配置一直是工程师面临的典型挑战。特别是当系统需要连接多通道编解码器ÿ…...
终极Windows驱动清理指南:3分钟快速释放C盘隐藏空间
终极Windows驱动清理指南:3分钟快速释放C盘隐藏空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统越用越慢,C盘空间莫名其妙消失&#x…...
2026-05-21:变成目标数组的最少操作次数。用go语言,给定两个长度相同的数组 nums 和 target。 - nums[i] 表示当前位置 i 当前的值。 - target[i] 表示当前位
2026-05-21:变成目标数组的最少操作次数。用go语言,给你两个长度为 n 的整数数组 nums 和 target。nums[i] 表示当前位置 i 的当前值,target[i] 表示你希望当前位置 i 最终变成的期望值。 你可以进行任意多次操作(可以不做&#x…...
