美文网首页OpenGL学习笔记
【四十六,光照贴图-01漫反射贴图】

【四十六,光照贴图-01漫反射贴图】

作者: Woodlouse | 来源:发表于2019-12-13 22:49 被阅读0次

漫反射贴图

我们希望通过某种方式对每个原始像素独立设置diffuse颜色,我们怎么实现呢?

对的:使用纹理

在光照场景中,通过纹理来呈现一个物体的diffuse颜色,这个做法称做漫反射贴图(Diffuse texture)

简单说:漫反射就是拿一张纹理,在片段着色器中使用纹理的颜色和漫反射参数计算输出颜色的值

1. 顶点数组定义
顶点数组包含三部分:顶点、法线和纹理坐标;

2. 顶点着色器
在顶点着色器中加入纹理坐标的输入和输出:

layout (location=2) in vec2 texCoords;
out vec2 TexCoords;
void main() 
{
  ...
  TexCoords = texCoords;
}

3. 顶点数据绑定

    //设置顶点属性
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);
    
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void*)(3*sizeof(float)));
    glEnableVertexAttribArray(1);
    
    glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void*)(6*sizeof(float)));
    glEnableVertexAttribArray(2);

4. 片段着色器
修改材质的定义,加入纹理对象的定义,去除环境光、漫反射光的属性:

  //材质属性定义
  struct Material {
      sampler2D diffuse;
      vec3 specular;
      float shininess;
  };
  uniform Material material;

使用纹理颜色计算环境光照和漫反射光照:

    // Diffuse
    vec3 norm = normalize(Normal);
    vec3 lightDir = normalize(light.position - FragPos);
    float diff = max(dot(norm, lightDir), 0.0f);
    vec3 diffuse = light.diffuse * diff * vec3(texture(material.diffuse, TexCoords));
    
    // Ambient
    vec3 ambient = light.diffuse * vec3(texture(material.diffuse, TexCoords));

运行效果

漫反射贴图

漫反射贴图源码

相关文章

  • 光照贴图

    光照贴图Lighting Maps 光照贴图分为漫反射贴图(Diffuse texture)和镜面贴图(Specu...

  • 【四十六,光照贴图-01漫反射贴图】

    漫反射贴图 我们希望通过某种方式对每个原始像素独立设置diffuse颜色,我们怎么实现呢? 对的:使用纹理。 在光...

  • 次世代游戏制作法线贴图渲染技巧图解

    次世代里法线贴图是什么呢?首先从名字就能看出他是一张贴图,像漫反射贴图,置换贴图,高光贴图,AO贴图,不透明图贴图...

  • 2022-10-18 实现有倒影的水

    一、原理1.实现环境贴图和漫反射2.利用法线贴图对环境贴图进行干扰,让环境贴图有扭曲的效果3.利用环境贴图代替漫反...

  • OpenGL #08 Lighting maps

    漫反射贴图   要想实现一个物体不同部分能有不同的漫反射光照处理,即对物体的漫反射分量有着精确的控制,我们应该需要...

  • 小怪兽+Corona第10天作业 #一味学吧Corona高级渲

    这节课学习了装饰墙的材质贴图 主要掌握漫反射、反射、凹凸分别贴相应的贴图~

  • WebGL学习之纹理贴图

    为了使图形能获得接近于真实物体的材质效果,一般会使用贴图,贴图类型主要包括两种:漫反射贴图和镜面高光贴图。其中漫反...

  • 9.opengl光照-漫反射贴图

    一、原理介绍 现实世界中,物体的材质通常不止一种,比如汽车有车壳、轮胎、窗户,每一种材质都会有漫反射和环境光颜色。...

  • Reference Nodes(引用节点)

    新建节点,删除其中自带的相机 拖动一个球体进去,处理各项属性 diffuse颜色贴图,漫反射贴图 normal法线...

  • WebGL学习之法线贴图

    实际效果请看demo:纹理贴图 为了增加额外细节,提升真实感,我们使用了漫反射贴图和高光贴图,它们都是向三角形进行...

网友评论

    本文标题:【四十六,光照贴图-01漫反射贴图】

    本文链接:https://www.haomeiwen.com/subject/ysmqnctx.html