背景

在BIM运维场景初始化的时候,一般都是首先将整个运维对象呈现在用户面前,例如一座大厦、一座桥梁、一个园区等等,以便于用户进行总览,总体把握运维对象,如果这个宏大的场景边界过于清晰,与背景融合也不是很好,看起来就会比较生硬,而通过对场景进行雾化,则可以使整个场景看起来更加地柔和,更加地真实。例如在threejs官网上的这个案例,就比较真实地将模型与背景做了融合,主要就是通过雾化来实现的。

实践

雾化主要通过两种类型实现,一种是线性雾,另一种是指数雾,分别对应Fog类和FogExp2类。Fog这个类中的参数定义了线性雾。也就是说,雾的密度是随着距离线性增大的,本案例中采用的是就是线性雾。线性雾的构造函数,Fog( color : Integer, near : Float, far : Float )。构造函数中传入颜色参数color来设置颜色属性,颜色可以是一个十六进制的整型数,或者是CSS风格的字符串。near参数指开始应用雾的最小距离,距离小于活动摄像机near个单位的物体,将不会被雾所影响,默认值为1。相似地,far参数指结束计算、应用雾的最大距离,距离大于活动摄像机far个单位的物体将不会被雾所影响,其默认值是1000。在具体场景中需要具体设置相关参数。而FogExp2这个类中的参数相对较少,只有一个color颜色和density密度,颜色和线性雾的使用方式是一样的,而密度参数是指定义雾的密度将会增长多快。

但是bimface中并不支持场景的雾化功能(据说正在开发,截止发稿时间尚未实现雾化功能),该如何使用呢?其实bimface也是以threejs为基石的,虽然没有在开发指南中说明场景Scene类如何使用,但是我通过研究源代码发现,通过Viewer3D对象是可以获取到场景Scene的,如果拿到了Scene对象,那问题就迎刃而解了。实际上配置雾化很简单,因为Fog是Scene的一个属性,创建Fog直接赋值给Scene的雾属性即可,主要还是自己根据实际的应用场景调整参数。

/**
* @author:xuhbd
* @function:为场景添加雾化效果,如果需要自行调整参数,需调用init方法
*/ var FogObject = {
viewer: null,
near: 0,
far: 0,
color: null, init: function init(color, near, far) {
this.color = 0xcce0ff;
this.near = near || 180;
this.far = far || 250;
}, enbaleRenderFog: function () {
this.init();
return new THREE.Fog(this.color, this.near, this.far);
}
} export { FogObject }
//雾化效果
getScene(viewer).fog = FogObject.enbaleRenderFog();

效果

作者:悠扬的牧笛
地址:https://www.cnblogs.com/xhb-bky-blog/p/12769254.html
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

【BIM】BIMFACE中创建雾化效果的更多相关文章

  1. 【BIM】BIMFACE中创建疏散效果

    背景 在BIM运维中,消防疏散是不可或缺的一环,当发生火警的时候,触发烟感器发生报警,同时启动消防疏散,指导现场工作人员进行疏散,及时准确地显示出疏散路线对争取疏散时间尤为重要.我将介绍如何在bimf ...

  2. 【BIM】BIMFACE中创建矢量文本[下篇]

    背景 在上一篇文章中,我们通过THREEJS创建了矢量文本,并添加到了BIMFACE场景中,但是仅仅加入到场景中并不是我们的目的,我们的目的是把这种矢量文本加到指定的构件或者空间上,以此标识该构件或空 ...

  3. 【BIM】BIMFACE中创建矢量文本

    背景 在三维模型产品的设计中,针对空间的管理存在这样一个普遍的需求,那就是在三维模型中,将模型所代表的空间通过附加文本的方式来展示其所代表的实际位置或功能,之前尝试过若干方式,比如直接在建模的时候,将 ...

  4. 【BIM】BIMFACE中实现电梯实时动效

    背景 在运维场景中,电梯作为运维环节重要的一部分是不可获缺的,如果能够在三维场景中,将逼真的电梯效果,包括外观.运行状态等表现出来,无疑是产品的一大亮点.本文将从无到有介绍如何在bimface中实现逼 ...

  5. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  6. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  7. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  8. SAP CRM 在Web UI中创建搜索帮助

    多数情况下,在Web UI为一个特定的字段提供搜索帮助需要在事务SE11中创建搜索帮助. (注:也可以通过在SE24中创建一个类并实现实现IF_BSP_WD_CUSTOM_F4_CALLBACK接口来 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

随机推荐

  1. Python Requests-学习笔记(2)

    你也许经常想为URL的查询字符串(query string)传递某种数据.如果你是手工构建URL, 那么数据会以键/值 对的形式置于URL中,跟在一个问号的后面.例如,httpbin.org/get? ...

  2. kubernates常用命令

    Kubernetes常用操作命令 kubectl log  //查看日志 $ kubectl log myapp-pod –c test kubectl get pods查看pod列表 [root@n ...

  3. mysql 使用技巧 分页limit

    mysql 分页使用 limit关键字,limit x,y (x代表从哪条数据开始,y代表页面大小.mysql第一条数据在limit计算时索引为0) 前10条 limit , 从第1条开始的10条 l ...

  4. CVE-2019-17671:wrodpress 未授权访问漏洞-复现

    0x00 WordPress简介 WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务 ...

  5. Android 修改应用程序字体

    在网上搜索了相关资料,研究了两种算是比较快速的改变程序字体的方法,好,先来介绍着两种方法. 首先第一种方法是重写控件(以Textview为例): 1.Android在写程序的时候谷歌早已将所有字体都默 ...

  6. 使用SVG内置API计算图形或点经过transform之后的新坐标

    一个应用场景是,点击一条路径,显示该路径的控制点.因为有transform变形( 平移.缩放.倾斜.旋转等变换),所以获取变形后的新坐标需要计算. 纯数学的方法,就是用2D变换矩阵的一些公式去运算,过 ...

  7. Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)

    在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...

  8. SpeedButton

    SpeedButton是一个图形控件,本身没有句柄.因此它不能具有焦点.你可以使用TBitBtn,调整一些属性,可以使他们的外形很接近. 只有从TWinControl派生的控件,才具有Handle.你 ...

  9. I - Red and Black DFS

    There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A ...

  10. Linux相关操作

    ssh配置秘钥 连接远程服务器时:需要用户持有“公钥/私钥对”,远程服务器持有公钥,本地持有私钥. 客户端向服务器发出请求.服务器收到请求之后,先在用户的主目录下找到该用户的公钥,然后对比用户发送过来 ...