如今的可视化开发平台有3D建模功能吗?

885

       众所周知,建模是需要使用建模工具的,常见的几种建模工具包括C4D软件、3DMAX、草图大师、等等,而做一个3D可视化应用必须要有模型才可以通过可视化技术展现的完美。thingjs作为物联网3D可视化开发平台,建模人员可通过鼠标快速“画”出楼层墙体结构,快速“摆”放物体在场景中的位置,依托丰富的3D模型库,5分钟即可“搭建”一个场景。


  CamBuilder

  Sketchup等主流建模软件,这些人们耳熟能详的建模平台功能强大,能够实现大量的建模需求,例如:工业产品设计、家具设计、建筑结构建模、力学测试等。但这些软件的使用者多为各行各业的专业人士,不经过培训,普通人很难上手进行操作,而过于细节化的建模工具,大多以点、线、面等矢量模型单位进行建模,使得建模过程繁琐,建模效率低下。如果选用这些传统建模软件搭建场景将耗费大量人力物力,使原本为了节约成本,提高效率所开发的3D物联网平台变得既不经济也不高效。因此,物联网3D场景的制作,需要一个操作简单,易于上手且搭建效率高的场景搭建平台。

  CamBuilder(也叫“模模搭”)是优锘科技推出的一款专门针对物联网设计的3D可视化软件。同时,CamBuilder也是优锘科技物联网3D可视化ThingJS平台的一个组件。CamBuilder致力于帮助非专业3D建模人员快速搭建3D场景。CamBuilder不仅提供了一个使用简单易用、功能强大的3D搭建工具,同时配合提供了丰富的3D模型库,即使是没有任何图形编辑经验的普通用户也可以快速搭建起例如:商场、医院、学校、仓库、公交车站等常见3D场景,大大提升了场景搭建效率。搭建好的3D场景通过简单的操作就可以上传到ThingJS在线平台上进行物联网可视化系统开发。

  快捷代码

  例:创建模型

  ThingJS平台提供模型(设施设备、建筑外观等)定制服务,每个模型800元起。用户可填写下面资料发出申请。申请建模界面如下:

  发起申请建模的步骤如下:

  在线开发环境,点击右上方“申请建模”按钮

  园区与层级

  在ThingJS中,所有的长度、距离度量单位都是米,因此在进行场景搭建时,请按照实际尺寸搭建园区、建筑、楼层、房间。摆放的物体如果是用户自行建模导入的,也请按照实际尺寸建模。

  比如,建模需求是一个园区内有一个建筑,我们分成两个工程进行搭建,分别是“XX工业园区”、“XX工业园区-办公楼室内”,工程内物体命名如下:

  资源管理

  若资源列表中的公共模型仍不能满足需求,可前往“资源中心”挑选模型;点击“申请建模”填写建模需求,完成模型制作;也可使用“3dsMax模型上传插件”上传模型。购买、上传的模型,均在“模型”-“个人”列表中。点击“刷新”,可刷新当前模型列表。

  界面介绍

  申请建模:

  场景搭建

  用户上传或者申请建模得到的模型资源。

  创建对象

  如何建模?

  但一个 3D 模型如何制作呢?这一章将为大家介绍一下部分建模软件以及建模软件中用到的技术。

  建模软件

  当建模可使用建模软件,常用的建模软件有以下两类:

  建模软件中涉及的技术

  mesh 建模

  大多数通用商业 3D 软件使用的建模技术,有点像雕塑,使用多边形体,进行编辑,再贴上贴图,模拟表面的材质。

  你只要知道,它是工业建模标准,大部分 3D CAD软件支持建模方法。它主要是通过数学公式定义每条线,每个曲面,所以可以做到无限细分面,应用于数字机床加工等,我们平时看到汽车,飞机等均由这类技术设计被用于制造。

  多照片自动建模

  CamBuilder 将在后续发布多照片自动建模功能,敬请期待。

  这是通过照片建模技术生成的模型:

  uBuilder功能

  如果用户是第一次使用该功能,需要点击上图中的【添加】按钮,在主界面DIY模型库中新建模型目录及上传新建模型。

      ThingJS资源中心中有3dmax上传插件,模模搭支持3dmax和标准obj模型上传,所以大家可以放心上传模型搭建场景。

/**

* 说明:如果模型自身带有动画

* 可通过 animationNames 属性,获取模型包含的所有动画名称

* 并通过 playAnimation 方法,播放动画

* 操作:点击按钮

* 文档:ThingJS教程 ——> 控制对象 ——> 模型动画

* 难度:★★☆☆☆

*/

var app = new THING.App();

// 创建机柜

for (var i = 0; i < 4; i++) {

app.create({

type: 'Thing',

url: 'https://www.thingjs.com/static/models/cabinets/47f34ce2c5a14b6d8fd4e80974394a55',

position: [i * 1.5, 0, 0]

});

}

app.camera.position = [0.8, 1.7, 6.0];

app.camera.target = [2, 0.8, 0];

// 创建按钮

new THING.widget.Button('播放动画', play_anim);

new THING.widget.Button('倒播动画', play_anim_reverse);

new THING.widget.Button('循环播放', play_anim_loop);

new THING.widget.Button('反复多个', play_anim_multi_pingpong);

// 播放动画 open1

// 通过obj.animationNames可以获取模型包含的所有动画名称

function play_anim() {

var cabinet = app.query('.Thing')[0];

// 查看 模型有哪些动画

console.log(cabinet.animationNames);

cabinet.playAnimation('open1');

}

// 倒播动画 open1

function play_anim_reverse() {

var cabinet = app.query('.Thing')[1];

cabinet.playAnimation({

name: 'open1',

reverse: true,

});

}

// 循环播放多个动画

function play_anim_loop() {

var cabinet = app.query('.Thing')[2];

cabinet.playAnimation({

name: 'open1',

loopType: THING.LoopType.Repeat, // 播完了从头再播

});

}

// 往返动画 open1,慢速

function play_anim_multi_pingpong() {

var cabinet = app.query('.Thing')[3];

cabinet.playAnimation({

name: ['open1', 'open2'], // 同时播放多个动画

loopType: THING.LoopType.PingPong, // 先正向播放后,再反向播放,如此循环

speed: 0.4 // 设置播放速率

});

}