OpenGL中环境光、漫反射、镜面反射对光的影响(如何被抽象成向量进行着色的)

Phong着色算法将模拟光对模型中每个顶点的影响。所以这个算法没法考虑阴影,它只会计算应用于每个顶点的光线,而不考虑顶点是否位于阻挡光线的物体后面。但是,正因为如此,这是一种非常简单快速的算法,可以提供非常好的效果。

关于光的种类可以参考这篇文章OpenGL的环境光、点光源、聚光灯、方向光、材质的定义,本文主要介绍点光源、聚光灯、方向光在Phong算法下物体的效果。

Phong算法中影响光照的三个因素
  • 环境光(Ambient):可以理解为现实中的白天的室内,白天在室内我们能看的见物体,但是并没有感知光线的方向,其实是因为太阳离我们太远了,导致我们周围的光线强度都是一样的。
  • 漫反射(Diffuse):面向光源的表面更亮。
  • 镜面反射(Specular):模拟光在抛光或金属表面的反射

其实最终我们就是要计算出一个影响颜色的因子,在执行片段着色器程序时用这个变量fragColor去乘以该因子,进而根据接收的光线将颜色设置得更亮或更暗。将场景中对其他光的影响因素环境光、漫反射、镜面反射分别叫做A、D、S,则计算那个影响颜色的因子可以用下面公式来表示。

  • 如果模型没有纹理,将按照下面这个公式去算:
1 课程简介:本课程详细讲解了OpenGL从入门到精通的理论+实践知识,对于每一个知识点都会带领学员通过代码来实现功能。其涵盖了基础图元绘制,基础光照,高级过程,高级光照等内容;当前图形引擎的应用已经越来越广泛,春晚以及各大综艺节目已经开始使用XR作为主流的内容制作技术,房地产漫游及Web渲染技术已经开始茁壮发展,VR也即将突破硬件瓶颈;普遍的游戏引擎在独特的领域已经无法完全实用,且我们国家要发展自主科技技术,图形引擎以及CAD等卡脖子技术一定会蓬勃发展,所以同学们要抓住机会,趁势而上,熟悉底层,博取更大发展,学习OpenGL底层接口的应用以及图形学算法,将是您向纵深发展的第一步!2 课程解决优势:很多同学学习OpenGL最难的是找到路径,并且其牵扯到的理论知识点无法完全理解透彻(比如VAO与VBO的区别,MVP矩阵变换的推导及原理,光照系统的设计及算法推导,帧缓存的灵活应用等),我们的课程可以带领大家从原理+实践的角度进行学习,每一个知识点都会:a 推导基础公式及原理 b 一行一行进行代码实践从而能够保证每位同学都学有所得,能够看得懂,学得会,用得上,并且能够培养自主研究的能力。学习课程所得:学习本课程完毕之后,学员可以全方位的完全了解OpenGL的必要接口,并且可以对图形学的基础知识融会贯通,可以制作级的特效。并且对于UnrealEngine以及Unity3D的学习更加轻松,对于各类商业引擎当的算法以及内容制作手法更加深刻理解把控。学员也可以自行进行图形引擎的设计以及研究,并且将本课程的知识点进行代码模块化编写;能够自主推导图形学管线以及应用当的各类公式,并且理解其几何含义。 代码与PPT资源,已随课程附赠,请同学们对应课程下载 
欢迎来到OpenGL系列教程之《OpenGL进阶》的OSX版。由于OpenGL的发展历史比较久远,因此给萌新们带来了不小的入门门槛,没有理清头绪一头扎进OpenGL里面进行学习的萌新们,可能很难理清头绪。不过不用怕,跟着我们的OpenGL系列教程一起学习,你将由浅入深的逐步掌握OpenGL的精髓,我们为萌新准备的是一套体系的知识系统,而不是凌乱的知识碎片。你将在我们这里把OpenGL学的清清楚楚,明明白白。无论你是小白学生、还是职场员工,都可以跟着我们的教程,一步一个脚印把整个图形学领域的知识学个痛快。在正式进入学习之前,我们需要提醒同学们注意下面这些点。比起一般的教程,我们这里会让你掌握整个图形学硬件API的全貌。在学习OpenGL进阶课程之前,我们期望你最好是已经掌握了我们的OpenGL入门课程,因为在入门课程我们会为你构建足够多的知识框架来帮助你更好的理解OpenGL进阶这边的知识点。OpenGL是一个直接与GPU接触的API,这种方便硬件操作,而且还是面向图形学编程的语言,当之无愧的要选C++。你不必担心的是,我们并不使用花里胡哨的C++语法,我们使用最基本的C With Class的编程风格,来保证程序的可移植性和可阅读性。如果你是来自其他行业的程序员,你觉得学起来难,纯粹是因为你的编程思路还是单线程的思路,算你厉害,你是个多线程思路那又如何。我们图形学编程里的程序是几百几千个线程同时运行的。怕不怕?如果你是完全没什么头绪的程序员,你的最好策略是,先把所有的视频浏览一遍,把随堂代码都拖出来编译运行一次,看看都是些什么东西。然后再第二遍精读课程。图形学编程更多的是硬件操作和数学,编程语言只是个工具和皮毛。没有高层语言那么多API让你用。如果存在,那么一定是某个个人提供的,OpenGL的API是由显卡驱动直接提供,也就是说,是显卡的硬件生产者提供了OpenGL的API,如果你的显卡是GTX1060,那么他的OpenGLAPI就是由nVidia提供的。如果你用的是Intel的集显卡HD4600,那么他的OpenGLAPI就是由Intel提供的。如果是移动端比如Mali的GPU,那么它的OpenGLES的API就是由arm实现的。而硬件厂商提供的都是标准的C语言API,所以高层语言是不存在OpenGL的API的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值