使用QT的canvas3d来加载3d模型

需求:接到一个任务要写展示一个设备的3D模型。串口连接设备返回仰俯角等数据,目的让展示里的模型跟着设备转动。

确定开发框架: 我原本是做VS开发的,以前用开始用MFC框架-->C#Winform-->duilib做界面。在接触的这几个技术并没有发现有3D的,第一反应用MFC做这个这个软件可能要疯吧。Duilib吧百度也一下没有找到做3D的例子(还是一个没有详细文档的开源库用了之后发现各种坑)。好在最近要学习QT,QTCreator的例子里面就有个3D展示一个手机不停旋转的。对的我就要抄那个这个例子。这样开始自己的第一个QT项目吧。

第一步当然先看实例里的代码,了解代码构架。此例子使用的是QTquick里的Canvas3D画布调用了three.js脚本来显示3D模型。里面涉及了QML,js,还有个脚本json。重点关注3文件 main.qml -> cellphonecanvas.qml->cellphone.js。

  1. 我使用的这个例子是用的three.js来显示3D,直接丢出讲解这个的视频https://www.bilibili.com/video/av541636494/  。我在官网下载的three.js和QT带的three.js不一样,所以沿用了QT里的three.js也没深究。
  2. 查看代码Main.qml为界面入口,cellphonecanvas.qml主要是定义了个Canvas3D画布用这个画布来调用js脚本。往下看找到cellphone.js脚本。这里放上一个Canvas3D制作3D的链接https://xiaoleng.blog.csdn.net/article/details/108003126
  3. 模型加载,此例子用的是json文件来装模型信息。下面继续丢出一个连接https://blog.csdn.net/weixin_34228617/article/details/92011134 

第二步开始准备我的模型,结构工程师给到我的是obj文件。 然后需要的是JSON文件。OK下面就是遇到的坑。

  1. 网上下载了three.js文件和相关的环境然后用命令把obj转换成了json文件,激动不已。导入qt项目,双击我的json文件卡死了。然后看了文件大小,我转的json文件是1306KB而QT例子里的json也就32KB差距有点大啊。
  2. 各种网上奋战终于有找到这个用blender来导出json文件。本以为要见到胜利的曙光,然并不是。刚开始下载了最新版本发现和我网上找的的资料不对应,找不到安装three.js的插件,然后又下了blender的2.79版本,导入已下载的three.js插件,然后又下了好几版本,最终还是找到了three.js-r69成功了。神奇的这个three.js-r69版本下的editor是可以用的。我下载的最新版本总是显示不全。
  3. 我最终使用的blender2.79导入了three.js-r69的插件。 导出来的json文件大小是954kb测试放入QT项目是可以用的了。(刚开始我是直接在例子源代码里测试我的json)。
  4. 简单记录一下导入插件的步骤

    看图file -> user preferences进入 ->Add-ons 选择Intall Add-ons from file  ->选择 three.js插件的目录(截图中有)

导入成功

以下丢出几个连接

https://github.com/mrdoob/three.js/tree/r69/utils/exporters/blender  three.js-r69

https://zhuanlan.zhihu.com/p/26941153 是这个博客指导了一条明路给我。https://download.blender.org/release/ 各个版本的blender下载

第三步就开始建立的我的项目了,

  1. 二话不说先把把QT自带的那个例子copy出来,记得要把three.js文件拷出来一般在这个目录下D:\Qt\Qt5.9.8\Examples\Qt-5.9.8\canvas3d\3rdparty。看自己的QT装在哪个盘。然后导入拷出来的的qrc资源文件下。
  2. 把自己不用的功能钱掉,多余的文件去掉,例子的有3个json文件,我这里只有一个json文件,所以把多余的去掉。替换好了,结果是顺当当的的把我的模型显示出来了。

第四步就开始开始根据自己的需求来做软件了。下篇文章再好好记录代码的实现。

  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在小程序中使用 Three.js 加载 glTF 3D 模型需要进行一些特殊处理。以下是一般的步骤: 1. 首先,确保你已将 Three.js 库引入到小程序项目中。 2. 在小程序的页面文件中,创建一个 Canvas 组件用于渲染 Three.js 场景: ```xml <canvas id="canvas"></canvas> ``` 3. 在页面的 JavaScript 文件中,使用 wx.createSelectorQuery() 获取到 Canvas 组件的上下文,并创建渲染器(renderer),设置其大小和渲染目标: ```javascript const query = wx.createSelectorQuery(); query.select('#canvas').node().exec((res) => { const canvas = res[0].node; const renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: true }); renderer.setSize(canvas.width, canvas.height); }); ``` 4. 在小程序的页面生命周期函数 onLoad() 或 onReady() 中加载 glTF 模型: ```javascript var loader = new THREE.GLTFLoader(); loader.load('path/to/model.gltf', function(gltf) { scene.add(gltf.scene); }, undefined, function(error) { console.error(error); }); ``` 请注意,此处的 scene 是你自己创建的 Three.js 场景。 5. 在小程序的页面生命周期函数 onShow() 中开始渲染场景: ```javascript function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } Page({ onShow() { animate(); } }); ``` 这是一个基本的在小程序中使用 Three.js 加载和渲染 glTF 模型的示例。需要注意的是,小程序环境与网页环境有一些差异,因此可能需要进行一些适配和调整。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值