当前位置: 首页 > news >正文

opengl灯光基础:2.1 光照基础知识

光照:

光照以不同的方式影响着我们看到的世界,有时甚至是以很戏剧化的方式。当手电筒照射在物体上时,我们希望物体朝向光线的一侧看起来更亮。我们所居住的地球上的点,在中午朝向太阳时候被照得很亮,但随着地球的自转,同一个地点的亮度会由白天到傍晚逐渐变暗,直到午夜变得完全黑暗。物体对光的反射情况也各不相同。物体除了可以具有颜色,也可以具有不同的反射特性。考虑两个物体,在都是绿色的情况下,其中一个是布制的,而另一个是抛光钢材质的——那么后者看起来会更“闪亮”。

光照模型:

我们观察到光,是由于高能量源发出的一些光子经过反射到达了我们的眼睛。不幸的是,在计算上模拟这个自然过程是不可行的,因为这需要模拟并跟踪大量光子的运动,即向我们的场景中添加海量的对象(和矩阵)。因此,我们需要的是光照模型。我的理解:
把高能量源发出一些光子经过反射到达我们眼睛的这种现象,通过计算机模拟的方式展现在我们眼前。计算机怎末模拟? 通过模拟并跟踪大量光子的运动,即向我们的场景中添加海量的对象(和矩阵),这个模拟的过程就叫做光照模型。(用于模拟光照效果的算法,通过考虑光源、材质和几何体之间的相互作用来计算表面的颜色和明暗度)

常见的几种光照模型:

光照模型只是比较笼统的概念,而具体的展现形式或者是实现方式有哪些?
比如:我要去某一个地方,怎末去?具体怎末到达, 我会说用交通工具(光照模型),交通工具用哪一种?步行,自行车,开车(常见的几种光照模型)
  • ADS模型:(主要的模型)

      它由三个部分组成:环境光照(Ambient),漫反射光照(Diffuse)和镜面光照(Specular)A:环境光反射(ambient reflection):模拟低级光照,影响场景中的所有物体。D:漫反射(diffuse reflection):根据光线的入射角度调整物体亮度。S:镜面反射(specular reflection):展示物体的光泽,通过在物体表面上,光线直接地反射到我们的眼睛的位置,策略性地放置适当大小的高光来实现。
    
  • 简单光照模型(Simple Lighting Model):

      这是一种基本的光照模型,通常只考虑漫反射光照,忽略环境光照和镜面光照。它适用于一些简单的场景或要求较低的应用。
    
  • Cook-Torrance模型:

      这是一种基于微表面理论的光照模型,适用于模拟金属或光泽材质的光照效果。它考虑了更多的光线与微表面的相互作用,能够产生更真实的镜面高光效果。
    
  • Oren-Nayar模型:

    这是一种用于模拟粗糙表面的光照模型。它考虑了表面的微小凹凸结构对光线的散射影响,能够产生更真实的漫反射光照效果。

ADS光照计算:

  • 总计算流程:
    在这里插入图片描述
		vec3 result = (ambient + diffuse + specular);
  • 环境光计算:

在这里插入图片描述

	环境光(光源)与材质环境光(物体自身)分量的乘积vec3 ambient = material.ambient * light.ambient;
  • 漫反射计算:
    在这里插入图片描述
	vec3 norm = normalize(Normal);vec3 lightDir = normalize(light.position - FragPos);float diff = max(dot(norm, lightDir), 0.0);vec3 diffuse = (diff * material.diffuse) * light.diffuse;
  • 镜面反射计算:
    在这里插入图片描述

ADS 光照模型的镜面反射指数为:1 (material.shininess = 1.0 )

	这也就和phong 的区别,ADS模型是phong光照模型的特例。
    // specularfloat specularStrength = 0.5;vec3 viewDir = normalize(viewPos - FragPos);vec3 reflectDir = reflect(-lightDir, norm);  // material.shininess = 1.0 ADS 光照模型的反射指数为:1float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);vec3 specular = (material.specular * spec) * light.specular;  

镜面反射指数为1的效果:

在这里插入图片描述

镜面反射指数为64 的效果:

在这里插入图片描述

http://www.lryc.cn/news/90808.html

相关文章:

  • 大屏时代:引领信息可视化的新潮流
  • ChatGTP全景图 | 背景+技术篇
  • 计算机专业学习的核心是什么?
  • 基于springboot地方旅游系统的设计与实现
  • 一些学习资料链接
  • Webpack打包图片-JS-Vue
  • 进程控制(Linux)
  • C Primer Plus第十四章编程练习答案
  • 又名管道和无名管道
  • 操作系统复习4.1.0-文件管理结构
  • 【嵌入式烧录/刷写文件】-2.6-剪切/保留Intel Hex文件中指定地址范围内的数据
  • JavaScript表单事件(下篇)
  • 机器学习 | SVD奇异值分解
  • chatgpt赋能python:Python取值:介绍
  • 广播风暴的成因以及如何判断、解决
  • Loki 日志收集系统
  • uCOSii信号量的作用
  • Android 13 版本变更总览
  • QT 设计ROS GUI界面订阅和发布话题
  • pandas数据预处理
  • Jupyter Notebook如何导入导出文件
  • Linux:/dev/tty、/dev/tty0 和 /dev/console 之间的区别
  • Linux 上安装 PostgreSQL——Ubuntu
  • 合并两个有序链表(java)
  • KEYSIGHT是德DSOX4034A 示波器 350 MHz
  • 局域网技术
  • Pixhawk无人机-ArduPilot 软件SITL仿真模拟飞行(SITL+MAVProxy)
  • vue实现深拷贝的方法
  • LAMP架构
  • javascript基础七:说说你对Javascript中作用域的理解?