热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

基于GLSL的聚光灯效果的绘制

体积光的绘制写在前面的话:这是基于openGL可编程管线的一次绘制实践,具体版本:openGL3.3。贴在前面的最终效果图:对于上述图片的简述:1.

体积光的绘制

写在前面的话:

这是基于openGL可编程管线的一次绘制实践,具体版本:openGL 3.3。

贴在前面的最终效果图:

显示结果


对于上述图片的简述:

1. 被光束照到的墙面的漫反射与镜面反射都得到了加强,且被照亮的区域边缘有自然的过渡;
2. 被光束照到的空间里产生了丁达尔现象,而且该圆锥形空间的边际模糊;
3. 光的强度随着投射距离的增大而逐渐变弱。

实现过程

在片段着色器中计算片段、光源两点的连线与聚光灯正射方向之间的夹角α大· 小,设定聚光灯光圆锥体的张角为一个常数Θ,若α大于Θ/2,则不点亮,若小于,则点亮。这样就完成了基本的一个聚光灯的效果。


用两个角度值来表示一个聚光灯的张角:较大的角Θ表示聚光灯能照射到的圆锥体空间的张角,若α大于Θ/2,则不被照亮;较小的角β表示聚光灯能完全照亮的圆锥体空间的张角,若α小于β/2,则光强为一个较大的常数;当α在两角之间,则用一个平滑插值smoothStep函数来计算这些中间区域的光强。这样就完成了一个光亮区域边缘软化的聚光灯效果。


在光束圆锥空间上实时绘制一个半透明的圆锥,这样就可以绘制一个简单的丁达尔现象。


在绘制光束圆锥体的时候将结果绘制到一个独立帧缓存绑定的纹理上去,然后用高斯模糊将其打散,在显示最后结果的纹理上再将打散之后的光束圆锥体画上去,这样就绘制出了一个比较真实的丁达尔现象。(高斯模糊效果可见下图中的红色区域)
高斯模糊之后的光束体


在片段着色器中绘制光束圆锥体时,根据片段与光源的距离去改变该片段的不透明度,在绘制被照亮的物体时,根据片段与光源的距离去改变光照的强度,岂可获得一个光亮有限且随距离柔和递减的光束。


在片段着色器中绘制光束圆锥体时,根据片段的法线方向,去改变不透明度,即可将一个整体的光束打撒成若干束光合成一个圆锥体光束的效果。(这一效果属于参数错误时意外所得)


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
  • Win11扩展卷无法使用?解决扩展卷灰色问题的指南
    本文详细介绍了在Windows 11中遇到扩展卷灰色无法使用时的解决方案,帮助用户快速恢复磁盘扩展功能。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 本文详细介绍了《问道》手游在2020年12月31日进行的服务器维护情况,以及此次更新中新增的跨年狂欢活动和寒假活动等内容。同时,文章还涵盖了其他重要的系统优化与修复信息。 ... [详细]
  • 掌握 Photoshop 是学习网页设计的重要一步。本文将详细介绍 Photoshop 的基础与进阶功能,帮助您更好地进行图像处理和网页设计。推荐使用最新版本的 Photoshop,以体验更强大的功能和更高的效率。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
author-avatar
Li-zHihuAn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有