openg-光照贴图
光照贴图
- 漫反射贴图
- 镜面光贴图
- 采样镜面光贴图
总结一句话,就是将之前的纯色,转换成读取贴图中的颜色来替代
漫反射贴图
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-光照贴图相关推荐
- unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题
最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏 ...
- OpenGL Lightmap光照贴图的实例
OpenGL Lightmap光照贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include ...
- OpenGL 光照贴图Lighting maps
OpenGL光照贴图Lighting maps 光照贴图Lighting maps简介 漫反射贴图 镜面光贴图 采样镜面光贴图 光照贴图Lighting maps简介 在上一节中,我们讨论了让每个物体 ...
- UE3 展开光照贴图的 UV
展开光照贴图的 UV 有关创建光照贴图 示例 光照贴图坐标索引 相邻 UV 以及间隔 有关创建光照贴图 光照贴图可能是场景美术制作中最难的环节.我们依靠它们可以得到光照和阴影清晰可见的细节.它们必须是 ...
- 关于unity2019.3.11.f在烘焙光照贴图时闪退的问题
在用unity2019版本的项目时一直有个问题困扰着我,就是勾选lighttingSetting中Auto Generate后,unity开始烘焙光照贴图时大概率立马闪退且没有任何报错信息. 为何说是 ...
- unity android光照贴图格式,Unity3D-光照贴图技术
概念 Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感:缺点是不能用来实时地处理动态光照.当游戏场景包 ...
- UE4-(光照)光照贴图
光照贴图是引擎内部自动生成的一种纹理,可以应用到模型表面. 在世界场景设置中: 找到光照贴图分段,就可以看到光照贴图.由引擎生成的光照贴图纹理要比一般光照贴图稍微复杂点,引擎会为这张贴图创建两个不同的 ...
- 第二十二章 Unity 光照贴图
光照贴图过程将预先计算场景中静态物体表面的亮度,并将结果存储在称为"光照贴图"的纹理中供以后使用.光照贴图可以包含直接光照和间接光照,以及阴影效果.但是,烘焙到光照贴图中的数据无法 ...
- 开发中–渐进式光照贴图器
We've been hard at work on the Progressive Lightmapper since we first showed it at GDC in March. Ple ...
- GraphicsLab Project之光照贴图烘焙(一)
作者:i_dovelemon 来源:CSDN 日期:2018-05-19 主题:Radiosity Algorithm, Global Illumination, Barycentric Coordi ...
最新文章
- 【C++】多线程与互斥锁【二】
- jsp:include page= /路径
- 五十四、Java日期Date,LocalDate类以及格式化输出
- Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索
- 【动态规划】叠放箱子问题(ssl 1640)
- thinkphp5记录
- 1.5编程基础之循环控制 26 统计满足条件的4位数个数 python
- Python深入06 Python的内存管理
- left join条件放在on和where的区别
- opencv viz3d 中的坐标系
- 将向量附加到向量[重复]
- 微信小程序 --- 音乐的播放和控制
- 版本控制工具的必要性、作用、分类和发展历程
- ReactNative集成百度语音合成
- 「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
- 基于链队列的银行叫号系统
- linux 无法创建目录权限不够
- github免费空间玩法
- C++ 笔记 加号运算符重载
- springboot-2-整合myBatis及druid连接池
热门文章
- 目前在题库管理和试卷生成方面最好用的共享软件(已更新)
- HR:这样的简历我只看了5秒就扔了,软件测试简历模板想要的进。
- 关于能力模型的思考总结
- 理解JESD204B链路参数 Understanding JESD204B Link Parameters
- vue实现pdf在线查看功能 vue-pdf
- ei指什么_SCI、EI、SSCI、CSSCI分别是指什么
- 【CocosCreator 3.x】实现双人同屏效果 => 攻略
- java中级工程师所需的技能_java中级工程师岗位职责
- RJ45-网口变压器及网口变压器-cpu之间的一些抗干扰防雷设计
- 雪球: 关于股票的经典书籍有哪些推荐