OpenGL3.3_C++_Windows(8)
材质&&漫反射,光照贴图
- 使用struct为材质建立结构体,以便方便管理
- 漫反射贴图是物体的颜色值(纹理)(通过 UV 坐标映射到渲染物体的表面),材质是物体的属性(物体对光的交互)
- glm::rotate(lightPos, glm::radians(0.1f), glm::vec3(0.0f, 1.0f, 0.0f)) 表示旋转的对象、旋转的角度和旋转的轴。
- /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
- 向量转化:
- 访问向量的前几个分量:xyzw,rgba,stpq(.)符号访问
- 增添分量:vecx( vecx,……,……)
- /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
- 光照贴图:由黑白颜色组成 * 镜面反射光,颜色黑到白(0.0——1.0),所以贴图颜色值越接近白色,镜面反射越强
- 光照贴图作用:根据贴图决定,镜面光对物体的每个部分的影响
投光物
- 我们可以根据物体的材质,计算光对物体的影响,但是光也有自己的模型(平行光,点光,聚光)
- 比如点光根据半径范围,强度逐渐衰减,那么根据物体与点光源的距离,需要获得新的光照强度,再计算光对物体的影响
- 比如聚光,会有方向以及切光角,在聚光范围内才会有光强度,并且如果执行了边缘软化,也会有光强度的影响

- 平行光不会向周围发射,光线平行,意味着不同位置的物体,接受的光线角度是一致的
- /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
- 点光源:之前模拟的就是点光源,这次增加了衰减,更真实的渲染效果
- 衰减:光线传播距离的增长逐渐削减光的强度
- d为片段到光的距离,距离越远d越大,一次项越大,作为分母,衰减值越小
- 二次项随着d的增加,变化幅度越快,作为分母,衰减值越小

- 衰减 = 1.0f /(1(控制分母>1,让强度值保持在0——1之间,让光强度只会减少不会增加)+一次项(线性)+二次项(距离越远,衰减速度越慢))
- 一次项:1/10 = 0.1;1/20= 0.05;1/30=0.03
- 二次项:1/100 = 0.01;1/400 = 0.0025;1/900=0.0011
- 由此可见,衰减速度都会越来越慢,并且二次项,对速度影响更大
- 通过一次二次项系数,调整衰减函数,从而影响光源的半径(点光源),
- 衰减值分别乘以环境光、漫反射和镜面光颜色
// attenuation
float distance = length(lightPos - v_Position);
float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance));
- /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
- 聚光:只朝一个特定方向而不是所有方向照射光线,只有在聚光方向的特定半径内的物体才会被照亮

- 光的位置,SpotDir聚光的方向,LightDir光线方向,
Phi𝜙聚光半径的切光角,Theta𝜃光线方向和聚光方向的夹角 - 计算LightDir向量和SpotDir向量之间的点积,角度越大,光强度越小。
- 向量的标准化:向量每个分量 / 向量长度(标量),最后向量长度变为1,方向不变
- 将要被点乘的向量归一化,指关心方向,所以点乘结果和向量长度无关,只和方向有关
- /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
- 以摄像机作为手电筒,相机前方为聚光方向
- 如何判断当前的片段是否在聚光内呢?
- 从聚光起始点(摄像机位置)到片段的向量(光线),计算与聚光方向的dot点乘,然后判断点乘的cos角度,是否在切光角内部,
- 因为切光角是角度,为了节约一点性能开销,需要把切光角glm::cos()转为cos,而不是将点积结果的反余弦
- 这里theta 差值 > light.cutOff进行光照计算:是因为角度都转化为了cos,一个0度的角度表示的是1.0的余弦值,而一个90度的角度表示的是0.0的余弦值。从而角度越大,cos越小,所以应该>cos角度才行。
- 最后如果在聚光内,执行光照计算,否则只有纹理颜色值+一点环境光(让场景在聚光之外时不至于完全黑暗)

- 我们现在就有了两个光源,手电筒,和点光源
- /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
- 边缘软化:新建外圆锥,原切光角为内圆锥,光从内圆锥逐渐减暗,直到外圆锥的边界
- 计算:( (当前角度cos - 外光切cos) / (内光切 cos- 外光切cos) )
- 注意,角度越大cos越小,设内外光切不变,内 - 外 = 正值
- 角度>在内外光切之间,分子为正数,差值 < 内外光切差值,聚光强度 <1
- 角度>外光切时,分子为负数,聚光强度 < 0
- 角度<内光切时,分子为正数,差值 > 内外光切差值,聚光强度 >1
- 不再需要
if-else,因为在切光角范围外,聚光强度为负, 是为了光照避免为负数,需要clamp()约束到0——1之间
相关文章:
OpenGL3.3_C++_Windows(8)
材质&&漫反射,光照贴图 使用struct为材质建立结构体,以便方便管理漫反射贴图是物体的颜色值(纹理)(通过 UV 坐标映射到渲染物体的表面),材质是物体的属性(物体对光的交互&a…...
GPU的工作原理
location: Beijing 1. why is GPU CPU的存储单元和计算单元的互通过慢直接促进了GPU的发展 先介绍一个概念:FLOPS(Floating Point Operations Per Second,浮点运算每秒)是一个衡量其执行浮点运算的能力,可以作为计算…...
Linux常⽤服务器构建-samba
目录 1. 介绍 2. 安装 3. 配置 3.1 创建存放共享⽂件的路径 3.2 创建samba账户 4 重启samba 5. 访问共享⽂件 5.1 mac下访问⽅式 5.2 windows下访问⽅式 1. 介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的⼀个免费软件,能够完成在 windows 、 mac 操作系统…...
【Java】已解决java.lang.UnsupportedOperationException异常
文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 已解决java.lang.UnsupportedOperationException异常 在Java编程中,java.lang.UnsupportedOperationException是一个运行时异常,通常表示尝试执行一个不支持的操作。这种异常经常发生…...
在ubuntu中恢复误删除的文件
1、安装 TestDisk 在 Ubuntu 上,可以使用以下命令安装 TestDisk: sudo apt-get install testdisk2、查询你删除的文件所在那个分区 #查询分区 df -h #我这里是/dev/sda2 #也可以使用下面命令查看具体哪个分区 lsblk3、查询该分区是什么系统类型 sudo …...
Sklearn中逻辑回归建模
分类模型的评估 回归模型的评估方法,主要有均方误差MSE,R方得分等指标,在分类模型中,我们主要应用的是准确率这个评估指标,除此之外,常用的二分类模型的模型评估指标还有召回率(Recallÿ…...
【ARM】MDK出现报错error: A\L3903U的解决方法
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决MDK出现报错error: A\L3903U这样类型的报错 2、 问题场景 电脑或者软件因为意外情况导致崩溃,无法正常关闭,强制电脑重启之后,打开工程去编译出现下面的报错信息(…...
0018__字体的kerning是什么意思
泰山OFFICE技术讲座:字体的kerning是什么意思-CSDN博客 了解CSS属性font-kerning,font-smoothing,font-variant-CSDN博客...
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
文章汇总 总体来看像是一种带权重的残差,但解决的如何高效问题的事情。 相比模型的全微调,作者提出固定预训练模型参数不变,在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数,用以模拟参数的变化量。 模型架构 h W 0 x △…...
cmake、make、makefile、ninga的关系
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本&am…...
StarRocks详解
什么是StarRocks? StarRocks是新一代极速全场景MPP数据库(高并发数据库)。 StarRocks充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果。 1.可以在Spark和Flink里面处理数据,然后将处理完的数据写到StarRo…...
【C语言】进程间通信之管道pipe
进程间通信之管道pipe 一、进程间通信管道pipe()管道的读写行为 最后 一、进程间通信 管道pipe() 管道pipe也称为匿名管道,只有在有血缘关系的进程间进行通信。管道的本质就是一块内核缓冲区。 进程间通过管道的一端写,通过管道的另一端读。管道的读端…...
03.VisionMaster 机器视觉 位置修正 工具
VisionMaster 机器视觉 位置修正 工具 官方解释:位置修正是一个辅助定位、修正目标运动偏移、辅助精准定位的工具。可以根据模板匹配结果中的匹配点和匹配框角度建立位置偏移的基准,然后再根据特征匹配结果中的运行点和基准点的相对位置偏移实现ROI检测…...
Oracle 是否扼杀了开源 MySQL
Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家,曾在MySQL公司担任性能工程师。大约15年前,当甲骨文收购Sun公司并随后收购MySQL时,有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…...
机器学习归一化特征编码
特征缩放 因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1——10,第二个特征的取值范围为1——10000。在梯度…...
抛光粉尘可爆性检测 打磨粉尘喷砂粉尘爆炸下限测试
抛光粉尘可爆性检测 抛光粉尘的可爆性检测是一种安全性能测试,用于确定加工过程中产生的粉尘在特定条件下是否会爆炸,从而对生产安全构成威胁。如果粉尘具有可爆性,那么在生产环境中就需要采取相应的防爆措施。粉尘爆炸的条件通常包括粉尘本身…...
python14 字典类型
字典类型 键值对方式,可变数据类型,所以有增删改功能 声明方式1 {} 大括号,示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …...
深入了解 .url文件中的 Prop3属性
在使用 Windows 操作系统时,我们经常会遇到以 .url 结尾的文件,它们通常被用来快速访问互联网上的特定网页。这些文件虽然看起来简单,但其中包含的 Prop3 属性却有其特殊的作用和意义。 1. Prop3 是什么? 在 .url 文件中&#x…...
vue3+vite:动态引入静态图片资源
目录 第一章 前言 第二章 vue2与vue3动态引入静态图片资源 2.1 vue2 webpack动态引入静态图片资源 2.1.1 了解 2.1.2 vue2项目动态引入静态图片资源 2.2 vue3 vite动态引入静态图片资源 2.2.1 了解 2.2.2 require vs import了解 2.2.3 vue3vite 项目动态引入静态图片…...
【K8s】专题五(3):Kubernetes 配置之 ConfigMap 与 Secret 异同
以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、相同点 二、不同点 一、相同点 功能作用:ConfigMap 与 Secret 都用于存储…...
Wireshark 实战|HTTP 协议:浏览器和服务器是怎么聊天的?
Wireshark 实战|HTTP 协议:浏览器和服务器是怎么聊天的? 大家好,我是网域小星球,一名网络工程大三学生。上一篇我们拆解了 DNS 域名解析,今天我们继续往下走,看看拿到 IP 地址后,浏…...
使用 Java Comparator 实现复杂排序逻辑
本文介绍了如何使用它 Java Comparator 对 Actor 对列表进行排序,包括 Actor 有类型(如 "Artist"、"Producer"、"Mixer" 等等)和名称。排序规则是:首先按类型优先排序("Artist" 最优先,然后是 "Producer&q…...
ArcGIS里坐标系搞混了怎么办?一份拯救‘空间参考错误’数据的实战排查指南
ArcGIS坐标系混乱急救手册:从定位问题到精准修复的全流程指南 当你在ArcGIS中加载多个来源的空间数据时,是否遇到过这些令人抓狂的场景?精心收集的行政边界图层突然跑到了撒哈拉沙漠;水文监测点数据明明采集于长江流域,…...
Unity入门:从零开始认识Unity编辑器界面
Unity入门:从零开始认识Unity编辑器界面📚 本章学习目标:深入理解从零开始认识Unity编辑器界面的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity入门篇&…...
LaTeX参考文献报错全解析:从\citation到\bibdata的避坑指南
LaTeX参考文献报错全解析:从\citation到\bibdata的避坑指南 当你熬夜赶论文时,突然在编译LaTeX文档时看到一串红色报错:"I found no \bibstyle command"、"I found no \bibdata command"、"I found no \citation co…...
Text Control DS Server 5.0 新增了依赖注入服务,允许插件直接与文档处理功能配合使用
启用插件对文档处理 API 的访问权限2026年3月24日Text Control DS Server 5.0 新增了依赖注入服务,允许插件直接与文档处理功能配合使用。TX Text Control DS Server 是一款服务器端文档处理解决方案,旨在将文档生成、编辑和转换功能集成到现代应用程序中…...
FaceFusion零基础换脸教程:5分钟搞定高清AI换脸,保姆级手把手教学
FaceFusion零基础换脸教程:5分钟搞定高清AI换脸,保姆级手把手教学 1. 前言:为什么选择FaceFusion 想试试AI换脸但被复杂的安装步骤劝退?FaceFusion可能是目前最简单易用的换脸工具。这个全新一代AI换脸工具无需安装,…...
Ostrakon-VL-8B高算力适配:RTX 4090D显存17GB极限压测与优化记录
Ostrakon-VL-8B高算力适配:RTX 4090D显存17GB极限压测与优化记录 1. 引言:当零售AI遇上顶级显卡 最近在部署一个专门为餐饮零售场景优化的多模态大模型——Ostrakon-VL-8B时,遇到了一个有趣的挑战。这个模型基于Qwen3-VL-8B微调,…...
保姆级教程:用Python+ROS从零实现IMU/GPS组合导航(附源码避坑)
从零搭建IMU/GPS组合导航系统:Python与ROS实战指南 在机器人导航领域,单纯依赖GPS或IMU都存在明显缺陷——GPS信号易受遮挡影响,而IMU存在累积误差。将两者数据融合的组合导航技术,正成为自动驾驶小车、无人机和移动机器人的标配方…...
SpringBoot+Vue学生在线训练考试系统源码+论文
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...
