如今的可视化开发平台有3D建模功能吗?
众所周知,建模是需要使用建模工具的,常见的几种建模工具包括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 // 设置播放速率
});
}