光照贴图

  • 漫反射贴图
  • 镜面光贴图
  • 采样镜面光贴图

总结一句话,就是将之前的纯色,转换成读取贴图中的颜色来替代

漫反射贴图

struct Material {sampler2D diffuse;vec3      specular;float     shininess;
};
...
in vec2 TexCoords;

注意我们将在片段着色器中再次需要纹理坐标,所以我们声明一个额外的输入变量。接下来我们只需要从纹理中 采样片段 的漫反射颜色值即可:

vec3 diffuse = light.diffuse * diff * vec3(texture(material.diffuse, TexCoords));

将环境光得材质颜色设置为漫反射材质颜色同样的值

vec3 ambient = light.ambient * vec3(texture(material.diffuse, TexCoords));

更新顶点着色器

lightingShader.setInt("material.diffuse", 0);
...
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, diffuseMap);

绑定箱子的纹理到这个纹理单元

lightingShader.setInt("material.diffuse", 0);
...
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, diffuseMap);

镜面光贴图

用来显示反光

镜面高光的强度可以通过图像每个像素的亮度来获取。镜面光贴图上的每个像素都可以由一个颜色向量来表示,比如说黑色代表颜色向量vec3(0.0),灰色代表颜色向量vec3(0.5)。在片段着色器中,我们接下来会取样对应的颜色值并将它乘以光源的镜面强度。一个像素越「白」,乘积就会越大,物体的镜面光分量就会越亮。

使用 Photoshop或Gimp 之类的工具,将漫反射纹理转换为镜面光纹理还是比较容易的,只需要剪切掉一些部分,将图像转换为黑白的,并增加亮度/对比度就好了。

采样镜面光贴图

lightingShader.setInt("material.specular", 1);
...
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, specularMap);

接下来更新片段着色器的材质属性,让其接受一个sampler2D而不是vec3作为镜面光分量:

struct Material {sampler2D diffuse;sampler2D specular;float     shininess;
};

最后我们希望采样镜面光贴图,来获取片段所对应的镜面光强度:

vec3 ambient  = light.ambient  * vec3(texture(material.diffuse, TexCoords));
vec3 diffuse  = light.diffuse  * diff * vec3(texture(material.diffuse, TexCoords));
vec3 specular = light.specular * spec * vec3(texture(material.specular, TexCoords));
FragColor = vec4(ambient + diffuse + specular, 1.0);

openg-光照贴图相关推荐

  1. unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题

    最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏 ...

  2. OpenGL Lightmap光照贴图的实例

    OpenGL Lightmap光照贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include ...

  3. OpenGL 光照贴图Lighting maps

    OpenGL光照贴图Lighting maps 光照贴图Lighting maps简介 漫反射贴图 镜面光贴图 采样镜面光贴图 光照贴图Lighting maps简介 在上一节中,我们讨论了让每个物体 ...

  4. UE3 展开光照贴图的 UV

    展开光照贴图的 UV 有关创建光照贴图 示例 光照贴图坐标索引 相邻 UV 以及间隔 有关创建光照贴图 光照贴图可能是场景美术制作中最难的环节.我们依靠它们可以得到光照和阴影清晰可见的细节.它们必须是 ...

  5. 关于unity2019.3.11.f在烘焙光照贴图时闪退的问题

    在用unity2019版本的项目时一直有个问题困扰着我,就是勾选lighttingSetting中Auto Generate后,unity开始烘焙光照贴图时大概率立马闪退且没有任何报错信息. 为何说是 ...

  6. unity android光照贴图格式,Unity3D-光照贴图技术

    概念 Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感:缺点是不能用来实时地处理动态光照.当游戏场景包 ...

  7. UE4-(光照)光照贴图

    光照贴图是引擎内部自动生成的一种纹理,可以应用到模型表面. 在世界场景设置中: 找到光照贴图分段,就可以看到光照贴图.由引擎生成的光照贴图纹理要比一般光照贴图稍微复杂点,引擎会为这张贴图创建两个不同的 ...

  8. 第二十二章 Unity 光照贴图

    光照贴图过程将预先计算场景中静态物体表面的亮度,并将结果存储在称为"光照贴图"的纹理中供以后使用.光照贴图可以包含直接光照和间接光照,以及阴影效果.但是,烘焙到光照贴图中的数据无法 ...

  9. 开发中–渐进式光照贴图器

    We've been hard at work on the Progressive Lightmapper since we first showed it at GDC in March. Ple ...

  10. GraphicsLab Project之光照贴图烘焙(一)

    作者:i_dovelemon 来源:CSDN 日期:2018-05-19 主题:Radiosity Algorithm, Global Illumination, Barycentric Coordi ...

最新文章

  1. 【C++】多线程与互斥锁【二】
  2. jsp:include page= /路径
  3. 五十四、Java日期Date,LocalDate类以及格式化输出
  4. Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索
  5. 【动态规划】叠放箱子问题(ssl 1640)
  6. thinkphp5记录
  7. 1.5编程基础之循环控制 26 统计满足条件的4位数个数 python
  8. Python深入06 Python的内存管理
  9. left join条件放在on和where的区别
  10. opencv viz3d 中的坐标系
  11. 将向量附加到向量[重复]
  12. 微信小程序 --- 音乐的播放和控制
  13. 版本控制工具的必要性、作用、分类和发展历程
  14. ReactNative集成百度语音合成
  15. 「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
  16. 基于链队列的银行叫号系统
  17. linux 无法创建目录权限不够
  18. github免费空间玩法
  19. C++ 笔记 加号运算符重载
  20. springboot-2-整合myBatis及druid连接池

热门文章

  1. 目前在题库管理和试卷生成方面最好用的共享软件(已更新)
  2. HR:这样的简历我只看了5秒就扔了,软件测试简历模板想要的进。
  3. 关于能力模型的思考总结
  4. 理解JESD204B链路参数 Understanding JESD204B Link Parameters
  5. vue实现pdf在线查看功能 vue-pdf
  6. ei指什么_SCI、EI、SSCI、CSSCI分别是指什么
  7. 【CocosCreator 3.x】实现双人同屏效果 => 攻略
  8. java中级工程师所需的技能_java中级工程师岗位职责
  9. RJ45-网口变压器及网口变压器-cpu之间的一些抗干扰防雷设计
  10. 雪球: 关于股票的经典书籍有哪些推荐