0.光照处理时候,向量点乘一定要是标准化后的单位向量!!!

1.冯氏光照模型:光照=环境光+漫反射+镜面反射

    vec3 result = ambient + diffuse + specular;

一般每一项的计算又分为几个小部分  partLight = S * K * M * O;

S指光源颜色,K指这部分光照的显示强度(一般来说环境光强度最弱,系数最小,镜面反射最大,漫反射居中),M指的是影响系数(由各种夹角计算出来,环境管不管,漫反射由入射向量和法线向量点积而得,但是注意是标准化后的向量,镜面先取反射向量,再和观察视线点积,也要注意单位向量的问题),O指的是物体本身的颜色(一般为纹理贴图的颜色),这一项其实也就是我们常说的材质materia

2.物体的材质materia实际上可以简单地理解为物体的贴图,也就是他所展示出来的颜色信息。其中有又分为漫反射贴图和镜面反射贴图。他们在相同光照下所反射的颜色不同

这两张图片一个是漫反射的贴图,一个是镜面反射贴图。他们都要加到同一个箱子上,然后渲染。第一个负责环境光和漫反射部分,后者负责镜面反射部分。这样才能将箱子四周的钢铁的镜面反射效果表现出来

3.光照模型其实也分为好多种:平行光(又叫定向光direction light)、点光源(point light)、聚光(spotlight),每种具体的光源渲染细节不同,但是大概结构相似,都满足1中的基本模型解释,只不过在细节和逼真度方面做了调整。具体参看https://learnopengl-cn.github.io/02%20Lighting/05%20Light%20casters/

4.三种不同光照模型的片元着色器跟顶点着色器代码见另一篇博客:https://www.cnblogs.com/guopinghai/p/9817847.html,具体完整代码可参见我的git:https://github.com/guopeiming/learnOpenGL/tree/master/exerciseCode/forth_light

openGL学习----光照的更多相关文章

  1. OpenGL学习进程(11)第八课:颜色绘制的详解

        本节是OpenGL学习的第八个课时,下面将详细介绍OpenGL的颜色模式,颜色混合以及抗锯齿.     (1)颜色模式: OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. R ...

  2. OpenGL学习之路(一)

    1 引子 虽然是计算机科班出身,但从小对几何方面的东西就不太感冒,空间想象能力也较差,所以从本科到研究生,基本没接触过<计算机图形学>.为什么说基本没学过呢?因为好奇(尤其是惊叹于三维游戏 ...

  3. OpenGL学习之路(三)

    1 引子 这些天公司一次次的软件发布节点忙的博主不可开交,另外还有其它的一些事也占用了很多时间.现在坐在电脑前,在很安静的环境下,与大家分享自己的OpenGL学习笔记和理解心得,感到格外舒服.这让我回 ...

  4. OpenGL学习进程(4)第二课:绘制图形

    本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) ...

  5. OpenGL学习笔记3——缓冲区对象

    在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...

  6. OpenGL学习进程(12)第九课:矩阵乘法实现3D变换

    本节是OpenGL学习的第九个课时,下面将详细介绍OpenGL的多种3D变换和如何操作矩阵堆栈.     (1)3D变换: OpenGL中绘制3D世界的空间变换包括:模型变换.视图变换.投影变换和视口 ...

  7. OpenGL学习笔记:拾取与选择

    转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...

  8. OpenGL学习之路(四)

    1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...

  9. OpenGL学习之路(五)

    1 引子 不知不觉我们已经进入到读书笔记(五)了,我们先对前四次读书笔记做一个总结.前四次读书笔记主要是学习了如何使用OpenGL来绘制几何图形(包括二维几何体和三维几何体),并学习了平移.旋转.缩放 ...

随机推荐

  1. 智能聊天机器人——基于RASA搭建

    前言: 最近了解了一下Rasa,阅读了一下官方文档,初步搭建了一个聊天机器人. 官方文档:https://rasa.com/docs/ 搭建的chatbot项目地址: https://github.c ...

  2. 使用PHP几种写99乘法表的方式

    首先按照规矩,还是先废话一番,对于刚学PHP的新手来讲,用php写九九乘法表无疑是非常经典的一道练习题. 但不要小看这道练习题,它对于逻辑的考验还是相当到位的. 也许有人会觉得,九九乘法表有什么难的, ...

  3. Git文件常见下标符号说明

    Git文件常见下标符号说明 git是一种分布式的版本控制工具.     不用联网也能实现版本控制,很实用. 它是一款现在比较流行的版本控制工具. git的文件上的图标,可以反映出当前文件或者文件夹的状 ...

  4. js实现十分钟内在页面无任何操作,页面跳转至登陆页

    // 如果10分钟没有操作,退出到登录页 var timer; function startTimer(){ clearTimeout(timer); timer=setTimeout(functio ...

  5. mybatis07--关联查询一对多

    案例   查询国家的同时,查询出国家下的省会信息! 01.使用单表的连接查询 创建对应的实体类 和数据库表 /** * *国家的实体类 */ public class Country { privat ...

  6. phpcms栏目标签调用

    $CATEGORY[$catid][catid]                栏目id   $CATEGORY[$catid][module]                栏目所在的模块   $C ...

  7. 剑指offer——python【第56题】删除链表中的重复节点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  8. 如何在Ubuntu上安装腾讯QQ

    首先QQ国际版下载连接:http://pan.baidu.com/s/1sj7i6BF 安装步骤: 一:安装依赖库 在终端输入:sudo apt-get install  libgtk2.0-0:i3 ...

  9. 使用Xshell调用linux的图形界面!

    环境说明: OS: centos 6.5 64位,最小化安装. Xmanager: 17.0.0.714 1.设置Xshell 2.将操作系统安装如下包 yum  install xclock xte ...

  10. [数学]MIT牛人解说数学体系

    本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/study/science/mit_math ...