[资料干货] 从零开始学习3D可视化之控制对象(2)

[复制链接]
 楼主| 森友小锘 发表于 2021-6-3 15:12 | 显示全部楼层 |阅读模式
本帖最后由 森友小锘 于 2021-6-3 15:16 编辑

#申请原创# #每日话题# #有奖活动# #技术资源# #申请开发板#
1、移动到某个目标位置
2、 让物体沿路径移动
3、 批量控制对象
上篇**中我学习了控制3D可视化场景中对象显示隐藏和旋转缩放,本篇我继续学习控制3D可视化场景中对象位移和批量控制对象。
1、移动到某个目标位置
我阅读文档中心后发现ThingJS提供了moveTo设置一个移动动画,rotateTo 设置一个旋转动画,scaleTo 设置一个缩放动画,用 movePath 可设置让物体沿一条路径移动等方法。旋转和缩放上篇**已经实现了,下面我用moveTo 实现将3D可视化场景中物体移动到某个目标位置。


两辆叉车我设置了两个目标位置,一个是世界坐标系一个是自身坐标下的位置。
完整代码如下:
  1. var app = new THING.App({
  2.     url: "models/storehouse"
  3. })

  4. // 加载场景后执行
  5. app.on('load', function () {
  6.     var car01 = app.query('car01')[0];
  7.     var car02 = app.query('car02')[0];
  8.     // 移动到 世界坐标系下某位置
  9.     new THING.widget.Button('世界坐标系下位置', function () {
  10.         car01.moveTo({
  11.             position: [0, 0, 0], // 移动到世界位置
  12.             time: 2 * 1000,
  13.             orientToPath: true,
  14.             // lerpType:null, // 插值类型 默认为线性插值
  15.             complete: function (ev) {
  16.                 console.log(ev.object.name + '移动完成');
  17.             }
  18.         });
  19.     })
  20.     // 移动到 相对于自身坐标下某位置
  21.     new THING.widget.Button('自身坐标系下位置', function () {
  22.         car02.moveTo({
  23.             offsetPosition: [0, 0, -10], // 相对自身 向后移动到 10m 处
  24.             time: 2 * 1000,
  25.             orientToPath: true,
  26.             complete: function (ev) {
  27.                 console.log(ev.object.name + '移动完成');
  28.             }
  29.         });
  30.     })
  31. });

2、让物体沿路径移动
还有一个神奇的方法 movePath,可以设置一条路径,让3D可视化场景中物体沿路径移动。


我创建了一个圆形路径让车沿着圆形路径移动,完整代码如下:
  1. var app = new THING.App({
  2.     url: "models/storehouse"
  3. })
  4. // 加载场景后执行
  5. app.on('load', function () {
  6.     // 通过 name 查询到场景中的车
  7.     var car = app.query('car01')[0];

  8.     new THING.widget.Button('圆形路径', function () {
  9.         // 创建一个圆形路径
  10.         var path = [];
  11.         var radius = 10;
  12.         for (var degree = 0; degree <= 360; degree += 10) {
  13.             var x = Math.cos(degree * 2 * Math.PI / 360) * radius;
  14.             var z = Math.sin(degree * 2 * Math.PI / 360) * radius;
  15.             path.push([x, 0, z]);
  16.         }
  17.         // 让车沿圆形路径运动
  18.         car.movePath({
  19.             orientToPath: true, // 物体移动时沿向路径方向
  20.             // orientToPathDegree: 90, // 沿向路径方向偏移一定角度
  21.             path: path,
  22.             time: 10 * 1000,
  23.             // 循环类型
  24.             // THING.LoopType.Repeat 不断循环
  25.             // THING.LoopType.PingPong 往复循环
  26.             loopType: THING.LoopType.Repeat
  27.         });
  28.     });

  29.     new THING.widget.Button('停止移动', function () {
  30.         car.stopMoving();
  31.     });
  32. });


运行项目后,ThingJS 示例园区中的建筑将被隐藏,如果将 visible 属性值 false 改为 true 后,建筑将显示出来。批量控制对象很有意思,上面我已经学习了控制3D可视化场景中物体移动,那么通过批量控制对象是不是可以实现3D可视化场景中多辆车自动泊车的效果呢?等我深入学习后可以试着实现一下。

通过学习控制对象我发现3D可视化场景中控制对象移动都是基于空间坐标系来移动的,我对于空间坐标系学习的还不足,下篇**我打算研究一下空间坐标系。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

107

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

107

主题

107

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部