ThingJS 3D用来增加视觉效果,给人以更加直观,真实的感觉。

ThingJS 3D框架简化了开发工作,面向对象和模块化的特点使得网页代码更加易于管理和维护,并且提供近200个官方示例,直接获取API能力,不需要基于3D概念进行开发,适合3D商业项目快速生成!距离您的业务仅一层之隔,是非开发者也容易理解的一种应用方法。

Three.js是更为底层的3D渲染器,提供各式各样的3D开发概念,例如材质、网格、shader、灯光,逐一进行定制化开发,要求程序员要有清晰的设计思路,尤其是在3D对象类的定义上。

今天一并总结常见的3D开发概念及其使用方法,包括:(1)第一人称漫游;(2)图片纹理;(3)子类与层级关系;(4)线段处理;(5)粒子系统。对于这些内容的解释和说明,我们在脚本文件中穿插进行,看看three.js和ThingJS实现过程中有何区别?

第一人称漫游

它允许用户通过键盘或鼠标对场景进行巡游控制,ThingJS平台通过第一人称行走控件实现。和three.js的代码量相比,显然更加轻量化。

// 添加控件
var ctrl = null;
var gui = null;
function add_control() {if (ctrl) {return;}app.camera.position = [0, 10, 0];// 起始位置 就是摄像机位置, 不设置就会在摄像机位置直接开始ctrl = app.addControl(new THING.WalkControl({ // 参数可以动态修改walkSpeed: 0.02, // 行走速度turnSpeed: 0.25, // 右键旋转速度gravity: 29.8, // 物体重量eyeHeight: 1.6, // 人高度jumpSpeed: 10, // 按空格键 跳跃的速度enableKeyRotate: false, // 默认不开启键盘控制旋转useCollision: false, // 默认不开启碰撞检测useGravity: true // 默认开启重力}));

图片纹理

在真实的3D场景中,模型是有纹理的,而不仅仅是只有颜色值,Three.js通过ImageUtils.loadTexture方法使用图片纹理对3D模型进行贴图,使得模型更接近真实。例如,MeshLambertMaterial(朗勃面)是一种很常用的材质,它将使用漫反射的方式引用前面的纹理图片,最终效果还与光线有关;另外一种常用的材质是MeshPhongMaterial,它可以产生镜面效果。
ThingJS中提供直接贴图的方式来实现模型纹理,建模师只要导入类似于照片效果的图形,简单实现模型的纹理,虽然无法实现three.js那样的细节定制化,仍旧可以改变参数来接近实景效果。

// 设置摄像机位置和目标点app.camera.position = [24.642510549459775, 4.302692201327658, 16.259715252398298];app.camera.target = [16.850313962013193, 0.15861977649910672, 4.364786416484356];new THING.widget.Button('创建 Box', function () {var box = app.query('#myBox01')[0];if (box) return;box = app.create({type: 'Box',id: 'myBox01',width: 2.0, // 宽度height: 2.0, // 高度depth: 2.0, // 深度center: 'Bottom', // 中心点position: [18, 0, 8],style: {image: 'images/uv.jpg',color: '#ffffff',}});})new THING.widget.Button('换 Box 贴图', function () {var imgUrl = 'https://www.thingjs.com/static/images/avatar.png';var box = app.query('#myBox01')[0];if (box) {box.style.image = imgUrl;}})

子类与层级关系

在此示例中,月亮属于地球的子类,将跟随地球一起绕太阳公转,通过创建子类,不管地球如何运动,月亮将自动跟随地球,程序不需要再单独处理这部分内容。层级关系是计算机动画的重要概念之一。比如骨骼动画,对于人体动画,小腿骨骼将跟随大腿骨骼一起运动。
在 ThingJS 场景中,每个对象,都可以通过 children 访问到下层子对象物体,通过 parent 访问到对应的父物体。创建一个物体对象时,可指定该对象的父物体;一个物体对象也可以通过 add ,添加子物体。

线段处理

在真实的太阳系中并没有轨道线,但在程序中加入轨道线将使场景更加美观。我们使用圆形轨道来模拟真实轨道(真实轨道是椭圆的),THREE.LineBasicMaterial材质可将geometry中的顶点逐个相连,只要分段足够多,最终的效果将趋于平滑的圆形,本例中,轨道线被分成了120段。
ThingJS提供轨迹线应用,直接封装了three.js有关于线条、材质的3D概念,直接取用轨迹线的对象规则来创建轨迹线,实现便捷开发。

/*** 说明:轨迹线应用*/
app = new THING.App({url: 'https://www.thingjs.com/static/models/simplebuilding'
});//轨迹线
var line;
app.on('load', function () {var points = [];var radius = 20;for (var degree = 0, y = 0.5; degree <= 520; degree += 2) {var x = Math.cos(degree * 2 * Math.PI / 360) * radius;var z = Math.sin(degree * 2 * Math.PI / 360) * radius;points.push([x, y, z]);}// 创建轨迹线line = app.create({type: 'Line',color: 0x00FF00, // 轨迹线颜色dotSize: 2, // 轨迹点的大小dotColor: 0xFF0000, // 轨迹点的颜色points: points,})// 小车开始沿轨迹线运动play();// 创建按钮new THING.widget.Button('开始移动', play);new THING.widget.Button('轨迹线', showLines);new THING.widget.Button('轨迹点', showPoints);
});// 物体跟随轨迹线运动
function play() {var car = app.query('car01')[0];car.movePath({'path': line.points, // 轨迹路线'time': 12000, // 移动时间'orientToPath': true, // 物体移动时沿向路径方向});
}// 显示/隐藏轨迹线
var lineVisible = true;
function showLines() {lineVisible = !lineVisible;line.showLines(lineVisible);
}// 显示/隐藏轨迹点
var pointVisible = true;
function showPoints() {pointVisible = !pointVisible;line.showPoints(pointVisible);
}

粒子系统

为使整个地月系看起来更加生动,我们为其添加了背景星空,随机地添加了1000颗星星,它们的大小和亮度不等,类似的情形包括烟雾效果、火焰效果、波纹效果等,在Three.js中,这类效果可以使用粒子系统来实现,即THREE.ParticleSystem。
ThingJS封装了粒子效果的实现方法,是更为顶层的抽象,所以减少了代码量和开发投入,更受3D开发初学者的欢迎,如直接用query查询API接口,在场景中加入火焰效果。

// 创建火焰粒子new THING.widget.Button('create', function () {var fire = app.query('#fire01')[0];if (!fire) {app.create({id: 'fire01',type: 'ParticleSystem',url: 'https://model.3dmomoda.com/models/19061018snbajhvuzrheq9sbgwdoefuk/0/particles',parent: car, // 设置粒子的父物体localPosition: [0, 0, 0] // 设置粒子相对于父物体的位置});}})

如果将场景扩展到了整个太阳系,包含水星、金星、地球、火星、木星、土星六大近地行星,所有星球均按真实大小比例和距太阳的距离构造,通过第一人称视角漫游,用户可以自由选择在任意位置、任意角度来观察太阳系,一样可以通过ThingJS的第一人称行走简单实现!

只要对技术实现逻辑清晰,就可以在不同的场景上轻松应用规则,实现快速的规模化3D开发!

ThingJS 和three.js对比开发太空漫游技术!3D 可视化相关推荐

  1. NASA样本实验室之3D渲染图,一分钟搭建教程!3D 可视化 ThingJS

    ThingJS在实现物理空间与信息空间的融合过程中,空间数据模型无疑是两者之间重要的联系纽带. 号外!美国宇航局(NASA)约翰逊航天中心向公众发布了目前正在建设中的实验室的渲染图,该实验室将用于研究 ...

  2. js 点击button切换颜色_ThingJS 和three.js开发示例对比,让开发早点下班回家!3D 可视化...

    ThingJS 3D框架简化了开发工作,面向对象和模块化的特点使得网页代码更加易于管理和维护,并且提供近200个官方示例,直接获取API能力,不需要基于3D概念进行开发,适合3D商业项目快速生成!距离 ...

  3. vue router 参数_Vue.js项目开发技术解析

    Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...

  4. Go 开发关键技术指南 | 敢问路在何方?(内含超全知识大图)

    作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 Go 开发关键技术指南文章目录: 为什么你要选择 Go? Go 面向失败编程 带着服务器编程金刚经走进 2020 年 敢问路在何方? Go 开发指南大图 ...

  5. ThingJS技术分享:建筑建模常用软件一览 3D 可视化

    聚焦物联网领域的3D开发软件,3D效果的描绘对象包括建筑.实景和室内.设备,面向的用户大致分为(1)非3D专业设计师.(2)建筑设计师和(3)转3D开发的前端工程师,不同群体的需求层次不一样,而不同的 ...

  6. 前端技术如何实现3D可视化应用开发?

    快速入门 使用之前 在开始使用 ThingJS 之前,需要先了解Javascript,我们假设您已经掌握JS. 创建项目 创建项目之前需登录ThingJS账号,如果您尚未登录账号或页面出现" ...

  7. Java开发与技术挑战——关于技术的技术思考

     Java开发与技术挑战--关于技术的技术思考 width="22" height="16" src="http://hits.sinajs.cn ...

  8. php微信墙开发,Node.js如何开发微信墙

    这次给大家带来Node.js如何开发微信墙,Node.js开发微信墙的注意事项有哪些,下面就是实战案例,一起来看一下. 验证服务器有效性 接收用户通过微信订阅号发给服务器的消息 解析收到的XML文本消 ...

  9. Js模块化开发的理解

    Js模块化开发的理解 模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突.管理 ...

  10. IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

    IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...

最新文章

  1. VMware View把iPad从娱乐工具变成强大办公平台
  2. Django 自定义模板标签TemplateTags
  3. python对象不接受参数什么意思___new\=TypeError:object()不接受参数
  4. 【checkStyle】ignore some class
  5. 1-3 数组的反序输出
  6. LiveQing直播点播存储流媒体服务-服务器并发性能及消耗带宽计算参考
  7. java在线聊天项目ppt_基于JavaEE的在线聊天聊天.ppt
  8. [置顶] java除0问题探究
  9. Node对CommonJS模块的实现
  10. 数论 之 筛法总结(艾托拉斯特尼筛法+欧拉筛法)
  11. RGB888与RGB565
  12. 计算机上fn按键,笔记本上fn是哪个键fn键功能详解【方法详解】
  13. Random类:用来产生随机数字
  14. 缓存路由组件+路由组件的2个生命周期钩子 activated 和 deactivated
  15. JSON.parse报错: Unexpected identifier
  16. 消除笔软件哪个好?这些软件可以无损涂抹图片
  17. golang中结构体转成xml格式
  18. Java项目:CRM客户关系管理系统(Spring+SpringMVC+MyBatis + maven)
  19. STGCN复现第三弹:解读math_graph.py
  20. 科普 | 处理器RISC和CISC架构分析对比

热门文章

  1. “但问耕耘,莫问收获”才有机会“碰运气”——新书《成功与运气:好运和精英社会的神话》解读
  2. word2007删除某一页的页眉横线
  3. 2021.12.10 vue vue-cil (12)
  4. 金士顿DT100 G3 PS2251-07海力士U盘量产修复成功教程
  5. access查找出生日期年份_Access时间日期比较查询的方法总结
  6. 计算机组装流程详解,笔记本电脑组装全过程图文详解
  7. 计算机图像识别的原理、过程、应用前景
  8. 阿里云Oss云存储的使用步骤
  9. photoshop教程裁剪和拉直照片以改善构图
  10. 一个简单的if控制语句