#version 430 coreuniform vec4 Ambient;           //环境光uniform vec3 LightColor;       //聚光灯颜色
uniform vec3 LightPosition;     //聚光灯位置
uniform vec3 SoptDirection;     //聚光灯中心灯光方向
uniform float SoptCosCutoff;    //聚光灯范围
uniform float SoptExponent;     //聚光灯指数
uniform float Shininess;
uniform float Strength;         //强度    uniform vec3 EyeDirection;      //视线方向
uniform float Attionuation;     //衰减系数in vec4 color;
in vec3 Normal;
in vec4 Pos;out vec4 FragColor;void main()
{//从聚光灯指向片元的向量vec3 lightDir = vec3(Pos.xyz) - LightPosition;//聚光灯和片元距离 float len = length(lightDir);//规一化lightDir = normalize(lightDir);//减,相当于加上反方向,半角向量vec3 HalfVector = normalize(EyeDirection - lightDir);//根据距离求出衰减值float Attenua = 1 / (Attionuation*(1.0+len*len));//漫反射 相当于max(0.0f, dot(Normal, -lightDir)) *0.6float diffuse = max(0.0f, -1*dot(Normal, lightDir)) *0.6;//镜面高光float specular = max(0.0f,dot(Normal, HalfVector));//基本平行时没有高光if(diffuse <= 0.00001)specular = 0.0f;elsespecular = pow(specular, Shininess);//cos夹角值 float Spotcos = dot(SoptDirection, lightDir);//夹角越大,cos值越小,大于聚光灯范围时没有聚光灯效果 if(Spotcos < SoptCosCutoff){Attenua = 0.0f;}else{//specular *= pow(Spotcos, SoptExponent);specular *= ((Spotcos-1)/(1-SoptCosCutoff) + 1 )*2.0*Strength;}//环境光加漫反射 vec4 scatteredLight = Ambient + vec4(LightColor * diffuse*Attenua, 0.0); //高光vec4 ReflectLight = vec4(LightColor*specular*Attenua, 0.0);//最终颜色 FragColor = min(color*scatteredLight + ReflectLight, vec4(1.0));}

OpenGL聚光灯实现注解相关推荐

  1. Avoiding 16 Common OpenGL Pitfalls(避免 16 个常见的 OpenGL 陷阱)

    前言 避免 16 个常见的 OpenGL 陷阱原文 Avoiding 16 Common OpenGL Pitfalls Copyright 1998, 1999 by Mark J. Kilgard ...

  2. OpenGL完整教程专栏完整目录

    OpenGL完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:OpenGL完整教程 数量:314篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去的博文, ...

  3. 【OpenGL】光照太阳系

    一.要求 二.思路 0.效果图 1.实现基本的太阳系 采用局部变换的思路完成,实现太阳.地球.月亮及轨道的绘制 2.宇宙中加入一盏泛光(方向光) 加入思路: 1)设置好物体的法向 在这里可以不进行设置 ...

  4. OpenGL基础24:聚光灯

    前置:OpenGL基础23:平行光与点光源 一.聚光灯 三种基础光源在上一章讲了2种,现在只剩下聚光灯了 手电筒就是一个很经典例子,相对于点光源,聚光灯拥有以下特点 依然有衰减,但是聚光灯的光照一般都 ...

  5. opengl光照之聚光灯

    聚光灯原理:(可想象成探照灯) 运行效果图 片元shader uniform vec4 U_LightPos;//光源位置 uniform vec3 U_EyePos;//眼睛的位置 uniform ...

  6. OpenGL(十二) 光源类型 平行光 、 点光源 、 聚光灯 的实现

    常规的 光源类型 有三种.最简单的自然是平行光.稍复杂些的为点光源,最复杂的为聚光灯.总体说来,在可编程管线中原理是一样的.在OpenGL代码中传入必要的参数,在shader中进行相关的计算绘制出效果 ...

  7. opengl对三种光源(方向光,点光源,聚光灯)进行特写并分屏渲染

    分屏特写渲染效果图 实现原理 1,创建3个fbo 2,分别将方向光,点光源,聚光灯的照射效果渲染到fbo 3,在将渲染好的三个fbo作为纹理贴到要绘制的三个四边形上. 渲染入口 #include &l ...

  8. opengl 教程(21) 聚光灯

    原帖地址:http://ogldev.atspace.co.uk/www/tutorial21/tutorial21.html 本篇教程中,我们来学习聚光灯的的光照效果,聚光灯有光源位置,也会随着传播 ...

  9. OpenGL教程翻译 第二十一课 聚光灯

    第二十一课 聚光灯 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) 背景 聚光灯是第三个也是最后一个我们将要介绍的光源类型(至少在一段时间内).他比平行光和 ...

最新文章

  1. 18 款顶级代码生成器平台!
  2. JTable是Swing编程中很常用的控件
  3. 独家 | 播客:入场券便是你的脸(附链接)
  4. 发表了一篇英文长文:语义信息G理论和逻辑贝叶斯推理for统计学习
  5. 对数据进行递归排序以树状显示
  6. 线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)
  7. MySQL基本操作(表,字段)
  8. 浅谈MIPS地址对齐问题
  9. aix oracle监听配置_AIX系统中安装ORACLE,客户端连接时,监听会宕掉的问题
  10. HashMap的结构及源码分析
  11. 计算机怎么把硬盘分成几个,如何把电脑的一个盘的容量分给另外一个盘
  12. ifconfig输出网口和ip
  13. JSON字符串与Map互转
  14. poi 灵活导出excel(有这一篇即可~~~~)
  15. diy服务器个人主机_DIY双路服务器之个人主机
  16. linux重启数据库11g,linux下重启oracle数据库
  17. 电脑硬盘分区不见了怎么恢复数据?
  18. Chrome终极全屏模式Kiosk
  19. iTween 用法总结
  20. 代码理解网络选择候选区域及确定最终目标框的过程

热门文章

  1. 【MATLAB】基于MATLAB实现灯光定位
  2. 2023大连理工大学考研分析
  3. centos7下svnserve方式部署subversion/SVN服务端(实操)
  4. 苹果Windows装oracle10,联想笔记本装Win8和MacOS10.9双系统安装教程
  5. 计算机软件流控制com,电脑控(com.pw.pccontrol) - 2.7.1 - 应用 - 酷安
  6. solidity 操作符01
  7. 使用-完美者U盘维护系统V8
  8. pythonhiq | 计算LiH分子的哈密顿量(ongoing)
  9. 商用及企业级服务器搭建之二:linux系统,linux命令
  10. 湖南大学校园网 TheServerIsNotResponding