LearnOpenGL学习笔记——基础光照

【learnOpenGL学习笔记_8】 光照基础 - OpenGL中的颜色 本文开始OpenGL光照方面的学习。在进入光照学习之前,需要先了解一下OpenGL中的颜色相关的知识。 阅读详情

1.光照模型

现实世界的光照是极其复杂的,而且会受到诸多因素的影响。我们一般模拟光照,使用的是冯氏光照模型:
环境光(Ambient):
即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。
漫反射(Diffuse):
模拟光源对物体的方向性影响(Directional Impact)。它是冯氏光照模型中视觉上最显著的分量。物体的某一部分越是正对着光源,它就会越亮。
镜面(Specular:
模拟有光泽物体上面出现的亮点。镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。
在这里插入图片描述
环境光照
环境光照是光线照射到物理上,物体本身发的光。

void main()
{
    float ambientStrength = 0.1;
    vec3 ambient = ambientStrength * lightColor;
    vec3 result = ambient * objectColor;
    FragColor = vec4(result, 1.0);
}
	

漫反射光照
漫反射光照距离光源越近,越明亮。光线垂直照射到物体上,和光线和物体有夹角是,亮度是不同的。norm为法向量
在这里插入图片描述

float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = diff * lightColor;

法向量的变换
法向量只是一个方向向量,不能表达空间中的特定位置。同时,法向量没有齐次坐标。这意味着,位移不应该影响到法向量。但是如果有旋转和缩放(不等比例缩放),顶点的改变会导致法向量不再垂直于表面了。如何计算缩放后的法线
在这里插入图片描述

   Normal = mat3(transpose(inverse(model))) * aNormal;

高光/ 镜面光照
在这里插入图片描述

我们先计算视线方向与反射方向的点乘(并确保它不是负值),然后取它的32次幂。这个32是高光的反光度(Shininess)。一个物体的反光度越高,反射光的能力越强,散射得越少,高光点就会越小。在下面的图片里,你会看到不同反光度的视觉效果影响:

vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
vec3 specular = specularStrength * spec * lightColor;

在这里插入图片描述

https://learnopengl-cn.github.io/02%20Lighting/02%20Basic%20Lighting/#_7

保姆级教程:用HFSS 2023 R2搞定GPS右旋圆极化微带天线(从建模到优化全流程) 本文提供了一份详细的HFSS 2023 R2教程,指导读者从零开始设计GPS右旋圆极化微带天线。涵盖建模、仿真和优化全流程,特别关注圆极化特性的实现与优化,帮助工程师快速掌握天线设计的关键技术。 阅读详情

相关推荐

初识Classic AUTOSAR开发工具链

在过去,软件和硬件之间具有很强的耦合性,阻碍了软件组件在不同硬件平台上的可移植性和重用性。而AUTOSAR作为汽车电子行业的标准,提供标准的软件接口定义,工程师可以根据需求将软件组件分配到汽车的ECU中,实现标准软件组件的可重用性。

怿星科技的博客 8093

LearnOpenGL CN 中文官方主页

LearnOpenGL CN 中文官方主页 1.https://learnopengl-cn.github.io/ openGL入门的最好教材之一 点击下一节 上面图片的红色线框内 可以看到英文原版,和中文翻译,以及随时源码 ...

aoxuestudy的专栏 9201

ADS124S08配置避坑指南:从SPI时序到寄存器设置,手把手教你调通24位ADC

本文详细解析了ADS124S08 24位ADC的SPI时序配置、寄存器设置及外围电路设计中的关键细节,帮助工程师避开常见陷阱。从SPI通信模式选择到DRDY引脚读取优化,再到基准电压启动时间调整,提供了实战验证的解决方案,确保高精度数据采集的稳定性。

weixin_29192365的博客 285

LearnOpenGL笔记(一)入门

learnopengl的入门简介。包括创建窗口,绘制三角形,实现FPS摄像机,纹理,着色器

weixin_44683202的博客 1536

巨量千川M-API实战:5分钟搞定短视频计划数据自动获取(Python版)

本文详细介绍了如何利用巨量千川M-API和Python快速搭建自动化工具,实现短视频计划数据的自动获取。通过实战代码演示了从环境准备、Token管理到核心数据接口调用的完整流程,帮助电商运营和技术开发者告别手动导出,高效完成数据汇总与分析。

weixin_29325515的博客 1357

避坑实录:用certificate-manager重置vCenter 6.7证书时遇到的三个致命陷阱

本文详细解析了使用certificate-manager重置vCenter 6.7证书时可能遇到的三大致命陷阱,包括进度卡在85%的服务启动僵局、脚本突然退出的静默杀手以及密码错误锁死的隐藏机制。通过实战验证的解决方案和高级恢复技巧,帮助系统管理员有效避免vCenter环境瘫痪,确保证书更新过程顺利进行。

g5h6i7j的博客 919

LearnOpenGL 学习笔记 高级 OpenGL

将一个多重采样的纹理图像不进行还原直接传入着色器也是可行的。GLSL提供了这样的选项,让我们能够对纹理图像的每个子样本进行采样,所以我们可以创建我们自己的抗锯齿算法。在大型的图形应用中通常都会这么做。要想获取每个子样本的颜色值,你需要将纹理uniform采样器设置为sampler2DMS,而不是平常使用的sampler2D:使用texelFetch函数就能够获取每个子样本的颜色值了:// 第4个子样本我们不会深入探究自定义抗锯齿技术的细节,这里仅仅是给你一点启发。

hijackedbycsdn的博客 1241

5大步骤!轻松玩转Dorisoy.Rigger:基于.NET Core 6、MAUI和Blazor的多数据库开发框架生成器

各位小伙伴,你们是否厌倦了每次项目启动都要从头配置数据库连接、编写重复的代码?今天,我们就来聊聊如何使用Dorisoy.Rigger这个强大的开发框架生成器,让你的.NET Core 6、MAUI和Blazor项目开发变得简单又高效!准备好迎接开发的新乐趣了吗?让我们一起开始吧!接下来,我们需要定义数据模型。假设我们有一个简单的用户表,包含ID、用户名和密码字段。在项目中创建一个新的类文件,命名为User.csset;set;set;这段代码定义了一个用户模型,其中包含了用户的ID、用户名和密码。

java专栏 1738

Learn OpenGL

Learn OpenGL

weixin_62486437的博客 1632

工业激光器核心参数详解与选型实战:从理论到产线落地(五)

本文深入解析了脉冲激光加工的三大核心参数——脉宽、重复频率和脉冲能量的协同作用机制。通过公式推导和产线案例,揭示了参数设置对加工良率的关键影响:1. 脉宽决定热影响区大小,缩短脉宽可显著提升加工精度;2. 重复频率影响加工速度和热积累效应,需平衡效率与质量;3. 脉冲能量决定材料去除量,过大易导致加工缺陷。文中以ABS塑料打标、模具清洗和微孔钻孔为例,展示了参数优化如何将良率从65%提升至99%,并提供了不同应用场景的参数选型表和调试技巧,强调峰值功率比平均功率更具决定性作用。

weixin_44520581的博客 2421

面向红外小目标检测的SCTransNet:模型优势解析、代码实现与完整复现指南

摘要:本文详细介绍了基于SCTransNet的红外小目标检测全流程实践方案。针对红外小目标检测面临的三大挑战(特征稀缺、背景干扰、尺度变化),SCTransNet通过空-通道交叉注意力机制有效增强目标特征。文章包含完整的PyTorch实现代码,涵盖特征提取、注意力模块、多尺度融合等核心组件,并提供模型训练、评估的具体方法。同时给出毕设创新方向的建议,如模型轻量化、多模态融合等,帮助提升研究深度。该方案技术难度适中,应用价值明确,是红外目标检测领域理想的毕设选题方向。

m0_71589036的博客 4760

LearnOpenGL 入门—纹理

文章目录写在前面纹理纹理环绕方式纹理过滤多级渐远纹理stb_image.h生成纹理应用纹理纹理单元总结练习 写在前面   原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。 纹理   我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。   艺术家和程序员更喜欢使用纹理(Tex

xiji333的博客 1037

数字图像处理 基于OpenCV的景深融合算法

还有的思路是对图像序列中的每一张图像分别进行拉普拉斯金字塔拆分,提取出每一张图像的高频信息和低频信息,得到所述图像序列对应的高频信息集合和低频信息集合。然后根据所述高频信息集合得到合成后的高频信息,对所述低频信息集合进行导向滤波处理得到合成后的低频信息,根据所述合成后的高频信息和低频信息做拉普拉斯金字塔重构,得到一张超景深图像。这里声明了几个变量,ImMer是最终合成的图像,coll是中间处理的变量,Coll_Ori是保存原图像数据的变量,dstWidth目标图像宽度(一般都是与原始图像大小一致)。

学以致用 知行合一 3901

LearnOpenGL学习笔记—高级光照 01~02:高级光照/Gamma校正

LearnOpenGL学习笔记—高级光照 01-02:高级光照/Gamma校正1 高级光照2 Gamma校正2.1 应用gamma矫正2.1 应用1:使用OpenGL内建的sRGB帧缓冲2.2 应用2:手动操作2.2.1 注意点1:sRGB纹理2.2.2 衰减3 实践 1 高级光照 本节对应官网学习内容:高级光照 官网基本就是讲Blinn-Phong,在入门的时候自己就额外做过了 所以附上当时的笔记:LearnOpenGL学习笔记—光照02:Lighting Basis/Advanced Lighting

清清!的博客 1113

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【LearnOpenGL学习笔记】——09.基础光照

文章目录1.了解冯氏光照模型2.法向量3.镜面光照(高光)4.练习 1.了解冯氏光照模型 (1)环境光照(ambient) (2)漫反射光照(diffuse) (3)镜面光照(specular) 2.法向量 (1)法向量的作用:计算漫反射过程中,Lambert公式中用到了单位法向量 (2)法线矩阵:用于将法向量从模型空间转换到世界空间——解释参考 法向量的空间转换最好在CPU上进行,再通过uniform传递给着色器 3.镜面光照(高光) (1)Phong模型的使用 4.练习 基础代码 #include

qq_45974407的博客 637

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LearnOpenGL学习笔记—光照01:Color

入门之后,第二部分开始啦 第二部分学习主要是靠[傅老師/OpenGL教學 第二章][10/16晚間更新] OpenGL自製3D遊戲引擎 本节笔记对应官网学习内容:颜色 1 颜色概述 颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB。 用这三个值就可以组合出任意一种颜色。 我们在现实生活中看到某一物体的颜色是它所反射的(Reflected)颜色。 换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。 这些

清清!的博客 717

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LearnOpenGL学习笔记—光照04:Lighting Maps

LearnOpenGL学习笔记—光照04:Lighting Maps0 前言1 diffuse+ambient2 specular3 Emission4 完整代码 0 前言 本节笔记对应官网学习内容:光照贴图 在光照01中我们初识了颜色的概念,试着做了一下环境光 在光照02中我们学习了一下Phong光照模型与Blinn-Phong光照模型 在光照03中我们初识了材质的概念并封装了对应的类 尽管在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。 这样能够很容易在一个光照的场景

清清!的博客 683

【OpenGL】LearnOpenGL学习笔记08 - 光照场景、基础光照

LearnOpenGL学习笔记 - 光照场景、基础光照

Duo1J的随笔 1189

LearnOpenGL学习笔记—光照:复习与总结

LearnOpenGL学习笔记—光照:复习与总结0 前言1 词汇表2 完整项目2.1 main.cpp2.2 Camera.h2.3 Camera.cpp2.4 Shader.h2.5 Shader.cpp2.6 Material.h2.7 Material.cpp2.8 vertexSource.vert2.9 fragmentSource.frag2.10 LightSpot.h2.11 LightSpot.cpp2.12 LightDirectional.h2.13 LightDirectional.

清清!的博客 1017

learnopengl学习笔记——光照

颜色 颜色是怎么产生的?太阳光是无色的,其实是包含各个颜色的。现实世界中的不同物体对每种颜色的吸收和反射程度不同,才有了了五彩的世界。所以最终呈现在人眼中的颜色是光线自身的颜色和物体本身的颜色二者的综合作用。 用RGB模型表示颜色,就可以用一个向量来表示颜色。自然光和物体自身颜色二者进行点乘即能得到。 glm::vec3 lightColor(1.0f, 1.0f, 1.0f); glm::vec3 toyColor(1.0f, 0.5f, 0.31f); glm::vec3 result = lightC

kiss_the_rian的博客 962

LearnOpenGL-光照章节学习笔记

环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。通过为每个分量指定一个颜色,我们就能够对表面的颜色输出有细粒度的控制了。在片段着色器中,我们创建一个结构体(Struct)来储存物体的材质属性。

weixin_70073176的博客 1274

LearnOpenGL 学习笔记 光照

因此,如果我们打算把法向量乘以一个模型矩阵,我们就要从矩阵中移除位移部分,只选用模型矩阵左上角 3×3 的矩阵(注意,我们也可以把法向量的 w 分量设置为 0,再乘以 4×4 矩阵;由于二次项的存在,光线会在大部分时候以线性的方式衰退,直到距离变得足够大,让二次项超过一次项,光的强度会以更快的速度下降。每当我们应用一个不等比缩放时(注意:等比缩放不会破坏法线,因为法线的方向没被改变,仅仅改变了法线的长度,而这很容易通过标准化来修复),法向量就不会再垂直于对应的表面了,这样光照就会被破坏。

hijackedbycsdn的博客 220

LearnOpenGL学习笔记—PBR:光照

LearnOpenGL学习笔记—PBR1 引入2 一个PBR表面模型3 直接光照明3 线性空间和HDR渲染4 完整的直接光照PBR着色器5 带贴图的PBR6 动手试试 本节对应官网学习内容:光照 结合英文原站,中文站,以及个人实践进行描述。 并且结合了个人在games101中的相关笔记 GAMES101课程学习笔记—Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪 GAMES101课程学习笔记—Lec 17:Materials and Appearances 材

清清!的博客 1370

LearnOpenGL学习笔记——高级光照

Blinn-Phong 冯氏光照不仅对真实光照有很好的近似,而且性能也很高。但是它的镜面反射会在一些情况下出现问题,特别是物体反光度很低时,会导致大片(粗糙的)高光区域。下面这张图展示了当反光度为1.0时地板会出现的效果: 可以看到,在镜面高光区域的边缘出现了一道很明显的断层。出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。如果点积的结果为负数,镜面光分量会变为0.0。你可能会觉得,当光线与视线夹角大于90度时你应该不会接收到任何光才对,所以这不是什么问题。 然而,这种想法仅仅只适用于漫反射

VIPCCJ的博客 319

LearnOpenGL 学习笔记 高级光照

phong 模型中的高光项在视线方向和反射方向角大于 90 度时,反射项变为 0这导致了奇怪的效果因此现在计算一个半程向量,他是光线的方向向量和观察向量加到一起,并将结果正规化(Normalize)当视线正好与(现在不需要的)反射向量对齐时,半程向量就会与法线完美契合。所以当观察者视线越接近于原本反射光线的方向时,镜面高光就会越强。现在,不论观察者向哪个方向看,半程向量与表面法线之间的夹角都不会超过90度(除非光源在表面以下)。它产生的效果会与冯氏光照有些许不同,但是大部分情况下看起来会更自然一点,特别是低

hijackedbycsdn的博客 626

LearnOpenGL学习笔记—光照03:Materials

LearnOpenGL学习笔记—光照03:Material0 前言1 材质结构(Shader)2 材质结构(Class)2.1 完整代码 0 前言 本节笔记对应官网学习内容:材质 在光照01中我们初识了颜色的概念,试着做了一下环境光 在光照02中我们学习了一下Phong光照模型与Blinn-Phong光照模型 在现实世界里,每个物体会对光产生不同的反应。 比如说,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射。 每个物体对镜面高光也有不同的反应。有些物体反射光的时候不会有

清清!的博客 671
上一篇: 计算机图形学--实时渲染中常用的工业界技术
下一篇: LearnOpenGL学习笔记——光照贴图
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值