在之前这篇文章,

WebGL 单通道wireframe渲染

我们介绍了webgl如何实现单通道wireframe的效果。

本篇文章就是在此技术原理基础之上,来实现发光的wireframe效果。

要实现发光的效果

所谓的发光的效果,就是颜色的渐变。 渐变越慢,发光的效果越明显,渐变越快,发光效果越不明显。

其实wireframe本身就是在两种颜色之间进行渐变,从代码也可以看出:

  1. gl_FragColor.rgb = mix(vec3(.0,.0,.0), vec3(1.0,1.0,1.0),edgeFactor3());

其中edgeFactor3() 就是通过重心坐标的变换计算出来的一个渐变过度的参数。

但是由于这种渐变的效果不够慢,所以 发光的效果不是很明显,因此我们可以改进如下效果,把渐变的参数通过pow函数进行处理,代码如下:

  1. float interopter = edgeFactor3();
  2. interopter = pow(interopter, uPower);
  3. gl_FragColor.rgb = mix(vec3(1.0,.0,.0), vec3(1.0,1.0,1.0),interopter);

其中uPower表示pow函数的次方,此处取值范围0~1,通过uniform变量传递该变量的数值,最终的效果如下:

上面是既有线框部分,也有面的部分。如果想实现只有线框的效果,可以启用透明的机制,并对颜色的透明度也进行渐变插值运算,透明设置代码如下:

  1. // 启用混合功能
  2. gl.enable(gl.DEPTH_TEST);
  3. gl.enable(gl.BLEND);
  4. gl.disable(gl.DEPTH_WRITEMASK);
  5. // 设置混合函数
  6. gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);

shader代码增加以下的这行代码:

  1. gl_FragColor.a = mix(1.0, .0,interopter);

效果如下图所示:

如果模型替换成球形,效果如下:

加载模型的效果如下:

如果修改shader中的edgeFactor3函数,把计算最小值,改为计算平均值,代码如下:

  1. float edgeFactor3(){
  2. vec3 d = fwidth(vBarycentric);
  3. vec3 a3 = smoothstep(vec3(0.0), d * 30.0 , vBarycentric);
  4. //return min(min(a3.x, a3.y), a3.z);
  5. return (a3.x + a3.y + a3.z) / 3.0;
  6. }

得到最终的效果如下图所示(立方体):

替换成模型,效果如下:

如果结合混合模式中的相加混合,加上多个模型的叠加,可以得到更明显的发光叠加的效果,此种效果经常用于智慧园区,智慧楼宇中楼宇的发光效果呈现。

首先把混合模式改成相加混合,代码如下:

  1. // 设置混合函数
  2. // gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  3. gl.blendFunc(gl.SRC_ALPHA, gl.ONE); //相加混合模式

然后同时绘制多个模型,代码如下:

  1. for (var i = 0;i < 10;i ++){
  2. gl.uniform1f(normalProgram.uScale, 1 - i/10)
  3. gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT, 0);
  4. }

最终的效果如下所示:

本文也发表在我的webgl专栏,相关代码可以在专栏中获取:

https://xiaozhuanlan.com/topic/0614325798

案例视频 可以关注视频号 "ITman彪叔"观看,也欢迎关注公众号。

webgl实现发光线框(glow wireframe)效果的更多相关文章

  1. CSS发光边框文本框效果

    7,166 次阅读 ‹ NSH Blog 网页设计 CSS发光边框文本框效果 或许你看过Safari浏览器下,任何输入框都会有一个发光的蓝色边框,这不单纯只是蓝色边框而已,其实包含了许多CSS3技巧知 ...

  2. GraphicsLab Project之辉光(Glare,Glow)效果 【转】

    作者:i_dovelemon 日期:2016 / 07 / 02 来源:CSDN 主题:Render to Texture, Post process, Glare, Glow, Multi-pass ...

  3. 图像滤镜艺术---Glow Filter发光滤镜

    原文:图像滤镜艺术---Glow Filter发光滤镜 Glow Filter发光滤镜 Glow Filter发光滤镜是一种让图像产生发光效果的滤镜,它的实现算法如下: 1,对原图P进行高斯模糊得到图 ...

  4. 使用 HTML5 WebGL 实现逼真的云朵效果

    这里给大家展示一个使用 HTML5 WebGL 实现超逼真的云朵效果.WebGL 是一项在网页浏览器呈现3D画面的技术,有别于过去需要安装浏览器插件,通过 WebGL 的技术,只需要编写网页代码即可实 ...

  5. HTML5 WebGL 实现逼真的云朵效果

    使用 HTML5 WebGL 实现超逼真的云朵效果.WebGL 是一项在网页浏览器呈现3D画面的技术,有别于过去需要安装浏览器插件,通过 WebGL 的技术,只需要编写网页代码即可实现3D图像的展示. ...

  6. 使用WebGL 自定义 3D 摄像头监控模型

    前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...

  7. 基于 HTML5 的 WebGL 和 VR 技术的 3D 机房数据中心可视化

    前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ...

  8. 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型

    前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...

  9. Unity GeometryShader(从一个线框渲染的例子开始)

    GeometryShader这个概念,已经出现很久了,但由于性能不佳,所以使用的并不多.甚至移动平台根本就不支持.移动平台的硬件更新速度也是越来越快,GS的应用普及应该不会太远.就现阶段而言,GS来做 ...

随机推荐

  1. 小谢第36问:elemet - table表格修改后表格行高亮显示且定位到当前行当前页

    第一次做这个需求得时候很乱,总是在表格页和修改页徘徊,总觉得什么都会,但是就是做不出自己想要得效果 其实如果先把思路搞清楚,这个问题得知识点却是不多,以下是我对表格高亮显示得思路: 首先,我会从已知得 ...

  2. (2)简单理解和使用webpack-dev-server

    webpack-dev-server能做什么? 每次打包都得像之前一样使用webapck 入口文件 -o 出口文件,每次修改都得打包一次过于麻烦,可以使用webpack-dev-server实现自动打 ...

  3. 牛客网Java工程师能力评估

    感觉很奇怪,出的题做完之后感觉自己没学过Java一样,不过凭借一些做题的技巧和一些记忆,正确率百分之50,排名前百分之30多,记录一下这次的题目,方便我以后进行二次复习吧 1.下面有关JVM内存,说法 ...

  4. Illegal instant due to time zone offset transition (Asia/Shanghai)_夏令时问题

    项目报错信息: Connot parse "1991-04-14",illegal instant due to time zone offset transition(Asia/ ...

  5. Interllij Idea 环境必要配置

    必要设置:https://blog.csdn.net/weixin_43378248/article/details/84673406 1. @Autowired 取消错误提示 (1)选择file - ...

  6. patelinux 安装

    参考文档:https://china.xilinx.com/support/documentation/sw_manuals/xilinx2017_2/ug1144-petalinux-tools-r ...

  7. 手把手教你安装Office 2019 for Mac ,安装包和破解码都给你准备好了,还装不上的话,你找我!

    准备一个安装包,和一个破解工具 ​ 安装MicrosoftOffice16.23.19030902_Installer.pkg, 注意在断网情况下安装 同时不要自动更新 , 安装好之后不要打开文件!​ ...

  8. antd实战:表单上传,文件列表的过滤与限制。

    用表单上传组件最痛苦的地方是: 他的诸多行为与纯上传组件不一样,而表单的文档关于这一块基本上没有提,只能自己试. 比如我想做一个上传前的拦截. beforeUpload: (file, fileLis ...

  9. ant design pro : 依赖项 webpack-theme-color-replacer 最新版导致项目无法启动?

    重新装了一个项目的依赖,结果发现打不开了? 报错如下: This dependency was not found: * webpack-theme-color-replacer/client in ...

  10. .log文件超过2.56MB?Pycharm的.log文件读取不完全?.log文件无法被调用?

    问题截图: 问题表现情况: 1.pycharm头部出现上图警告 2.该.log文件读取不完全 3.该.log文件无法被调用 解决步骤: 参考博客:https://blog.csdn.net/Shen1 ...