OpenGL3.3_C++_Windows(24)

渲染平行光阴影

  • 阴影作用:

  • 有了阴影的渲染,更容易地区分出物体之间的位置关系,
  • 如何判断片段是否在阴影中?
  • 普通思路:

  • 以光的位置为视角进行渲染,我们绘制一条从光源出发的射线,测试更新射线经过的所有片段,与当前min最近片段比较,如果更远,就在阴影中
  • 弊端:

  • 射线上的成千上万个点进行遍历是个极端消耗性能,所以换种思路,利用深度缓冲
  • 深度缓冲:

  • 深度缓冲大小符合窗口的宽高,当运行深度测试时,每个像素的深度值和已经存储在这个像素的深度值(深度缓冲)进行比较,根据深度测试函数,决定片段是否丢弃
  • 深度/阴影/shadow Mapping贴图

  • 从光源的透视图来渲染场景,并把深度值的结果储存到纹理中,深度值因为会不断测试更新,最后的结果,就是最近的片段的深度值,通过纹理坐标,可以对它进行采样,获取深度值
  • T变换

  • 来自光源的视图投影矩阵,可以将任何三维位置(从世界坐标)转变到光源的可见坐标空间
  • 如何利用深度贴图判断片段是否在阴影中?

  • 首先T变换到光源的坐标空间里,使用生成的深度贴图计算片段是否在阴影之中,z深度 如果 > 片段的深度缓冲的深度值,则在阴影中

运算:

  • 创建新的帧缓冲

  • 因为要对深度值采样,所以应存储在纹理附件(非渲染缓冲对象附件),应用的纹理格式为GL_DEPTH_COMPONENT,
  • 注意:不包含颜色缓冲的帧缓冲对象是不完整的,所以我们需要显式告诉OpenGL我们不适用任何颜色数据进行渲染。glDrawBuffer(GL_NONE); glReadBuffer(GL_NONE);
  • 平行光源空间的T变换矩阵

  • LookAt()计算光(位置+看的方向)的view矩阵(实质,将物体坐标变换到相机坐标的视角下),

  • 如果使用一个所有光线都平行的定向光,使用正交投影矩阵,否则点光源和聚光灯,使用透视投影矩阵(因为投影矩阵实质,是决定可见的范围,以及范围的形状,光空间的范围,即光线的散射组成的范围,被光覆盖的范围)

  • 渲染到深度贴图

  • 启用帧缓冲,渲染场景,使用的新glsl中,将每个顶点变换到光空间,从而深度值保存到了深度纹理附件中,fragment什么都不用做,我们只需要深度缓冲(默认更新),也可以手动设置gl_FragDepth = gl_FragCoord.z;
  • //深度缓冲视觉化

  • 这次渲染quad,并应用深度纹理附件作为quad 的纹理。
  • 但是注意:正交不受深度值影响,透视投影矩阵,当深度缓冲视觉化经常会得到一个几乎全白的结果,深度变成了非线性的深度值,只有距离很近,颜色亮度才会骤降。
  • 解决方案就是变为线性深度值。
深度缓冲视觉化
  • 渲染阴影:Fragment glsl

  • 将要产生阴影的物体,在vs中将世界空间顶点位置转换为光空间,传入fs,计算出一个shadow值,当fragment在阴影中时是1.0,在阴影外是0.0
  • 将(1 - shadow )* 其他冯氏颜色分量(由于当shadow = 1的时候(在阴影),结果颜色为0),由于阴影不会是全黑的,把ambient分量从乘法中剔除。
  • 这样保证,当片断位于阴影,结果为ambient * 其他冯氏颜色分量,当非阴影 = ((ambient + 1 * 其他冯氏颜色分量
  • 计算阴影():

  • 光空间的片段位置(被判断的像素)和第一个渲染阶段得到的深度贴图(取深度值)
    • 光空间片段位置转换为裁切空间的标准化设备坐标。
    • 当运行到gl_Position时,OpenGL自动进行一个透视除法,x、y、z元素除以向量的w元素来实现,我们必须自己做透视除法
    • 因为来自深度贴图的深度在0到1的范围,我们再次将NDC坐标变换为0到1的范围
    • 从深度贴图,采样片段坐标,对应的深度值,如果片段的z高于采样的深度值,则表明片段在阴影中,返回1,否则返回0 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-分析期末选择题考点(广义表)

莫道桑榆晚 为霞尚满天 数据结构-图期末选择题 数据结构-串、数组选择题 数据结构-排序选择题 数据结构-线性表、栈、队列、二叉树合集 契子✨ 广义表&#xff1a; <1>考点一&#xff1a;基本概念 广义表的基础概念 &#xff08;1&#xff09;什么是广义表 广义表&#…

小韩厂涨乌托邦公式源码

小韩厂涨&乌托邦&公式源码已经测试通过,可以发布云平台自行编辑 DRAWGBK(C>0, RGB(50,60,250),RGB(17,21,89),0,11,0); H1:=MAX(DYNAINFO(3),DYNAINFO(5)); L1:=MIN(DYNAINFO(3),DYNAINFO(6)); P1:=H1-L1; 阻力:=L1+P1*7/8,COLORGREEN; 支撑:=L1+P1*0.5/8,COLORRED;…

超详细的 C++中的封装继承和多态的知识总结<1.封装>

引言 小伙伴们都知道C面向对象难&#xff0c;可是大家都知道&#xff0c;这个才是C和C的真正区别的地方&#xff0c;也是C深受所有大厂喜爱的原因&#xff0c;它的原理更接近底层&#xff0c;它的逻辑更好&#xff0c;但是学习难度高&#xff0c;大家一定要坚持下来呀&#xff…

如何做好一个企业家IP:塑造独特的个人品牌

在当今数字化时代&#xff0c;个人品牌的力量愈发凸显&#xff0c;对于企业家而言&#xff0c;一个强大的IP&#xff08;Intellectual Property&#xff0c;即知识产权或个人品牌&#xff09;不仅有助于提升个人影响力&#xff0c;还能为企业的发展注入强大动力。那么&#xff…

Flutter【组件】点击类型表单项

简介 flutter 点击表单项组件&#xff0c;适合用户输入表单的场景。 点击表单项组件是一个用户界面元素&#xff0c;通常用于表单或设置界面中&#xff0c;以便用户可以点击它们来选择或更改某些设置或输入内容。这类组件通常由一个标签和一个可点击区域组成&#xff0c;并且…

【后端面试题】【中间件】【NoSQL】ElasticSearch索引机制和高性能的面试思路

Elasticsearch的索引机制 Elasticsearch使用的是倒排索引&#xff0c;所谓的倒排索引是相对于正排索引而言的。 在一般的文件系统中&#xff0c;索引是文档映射到关键字&#xff0c;而倒排索引则相反&#xff0c;是从关键字映射到文档。 如果没有倒排索引的话&#xff0c;想找…

基于51单片机的篮球计时器Proteus仿真

文章目录 一、篮球计时器1.题目要求2.思路3.仿真图3.1 未仿真时3.2 仿真开始3.3 A队进分3.4 B队进分3.5 比赛结束 4.仿真程序4.1 主函数4.2 时间显示4.3 比分显示4.4 按键扫描 二、总结 一、篮球计时器 1.题目要求 以51单片机为核心&#xff0c;设计并制作篮球计时器 基本功…

数据结构:期末考 第六次测试(总复习)

一、 单选题 &#xff08;共50题&#xff0c;100分&#xff09; 1、表长为n的顺序存储的线性表&#xff0c;当在任何位置上插入或删除一个元素的概率相等时&#xff0c;插入一个元素所需移动元素的平均个数为&#xff08; D &#xff09;.&#xff08;2.0&#xff09; A、 &am…

基于matlab的可乐标签模板匹配

1 建模思路 1.图像预处理&#xff1a; 如果目标图像和模板图像是彩色的&#xff08;即RGB图像&#xff09;&#xff0c;则将它们转换为灰度图像&#xff0c;以便在单通道上进行匹配。使用rgb2gray函数进行灰度化。 2.获取模板大小&#xff1a; 使用size函数获取模板图像的高…

骁龙相机拍照流程分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 1.deliverInputEvent 拍照点击事件处理 2.submitRequestList Camera 提交拍照请求 3.createCaptureRequest 拍照请求帧数 骁龙相机通过binder 数据传输…

2006-2020上市公司研发投入金额数据集

2006-2020上市公司研发投入金额数据集https://download.csdn.net/download/a519573917/89501035 目录 上市公司研发投入与企业绩效的关系研究 一、引言 二、文献综述 三、研究设计 四、实证结果与分析 &#xff08;一&#xff09;描述性统计分析 &#xff08;二&#xf…

人工智能在肿瘤:分子亚型分类领域的最新研究进展|顶刊速递·24-07-01

小罗碎碎念 今日推文主题&#xff1a;人工智能在肿瘤/分子亚型分类中的应用 小罗观点 前两天有一位复旦的师兄私聊问了我一些问题&#xff0c;我看完以后觉得大家可能对于“分类”的概念有点不太熟悉&#xff0c;所以我决定写这篇推文系统的梳理一下“分类”和“回归”。 这俩都…

CleanMyMacX2024免费且强大的mac电脑系统优化工具

如果你的Mac电脑出现了存储空间不足、运行缓慢、电池电量消耗过快等问题&#xff0c;那么CleanMyMacX这款软件或许能为你提供解决方案。作为一款强大的系统优化工具&#xff0c;它能够帮助用户清理垃圾文件、优化内存和电池使用&#xff0c;从而提升Mac的性能表现&#xff0c;让…

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

使用 Vue 实现包含单选框的弹窗功能(附Demo)

目录 前言1. Vue22. Vue3 前言 如果在弹窗中单独增设一些选项或者少部分的数据&#xff0c;可用如下的方式 &#xff08;不用单独创建专门的表单样式&#xff09; 如果单纯可以通过基本的按钮传输给后端&#xff0c;可用如下知识点 对于弹窗的基本知识推荐阅读&#xff1a; …

2024年06月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 2 分,共 30 分) 第1题 小杨父母带他到某培训机构给他报名参加 CCF 组织的 GESP 认证考试的第 1 级,那他可以选择的认证语言有几…

数据资产铸就市场竞争优势:运用先进的数据分析技术,精准把握市场脉搏,构建独特的竞争优势,助力企业实现市场领先地位,赢得持续成功

目录 一、引言 二、数据资产的重要性 三、先进数据分析技术的应用 1、大数据分析技术 2、人工智能与机器学习 3、数据可视化技术 四、精准把握市场脉搏 1、深入了解客户需求 2、预测市场趋势 3、优化资源配置 五、构建独特的竞争优势 1、定制化产品和服务 2、精准营…

zerotier-one自建根服务器方法四

一、简介 前面几篇文章已经写完了安装配置服务器&#xff0c;今天写一下客户端如何连接自建的服务器。 二、准备工作 准备一个有公网IP的云主机。 要稳定性、安全性、不差钱的可以使用阿里、腾讯等大厂的云服务器。 本人穷屌丝一枚&#xff0c;所以我用的是免费的“三丰云…

Firefox 编译指南2024 Windows10-使用Git 管理您的Firefox(五)

1. 引言 在现代软件开发中&#xff0c;版本控制系统&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;它不仅帮助开发者有效管理代码的变化&#xff0c;还支持团队协作与项目管理。Mercurial 是一个高效且易用的分布式版本控制系统&#xff0c;其设计目标是简洁、快速…

【代码随想录】【算法训练营】【第53天】 [739]每日温度 [496]下一个更大元素I [503]下一个更大元素II

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 48&#xff0c;周六&#xff0c;不能再坚持~ 题目详情 [739] 每日温度 题目描述 739 每日温度 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 [496] 下一…