光照 镜面光贴图示例

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光照 镜面光贴图示例相关的知识,希望对你有一定的参考价值。

通过使用镜面光贴图我们可以可以对物体设置大量的细节,比如物体的哪些部分需要有闪闪发光的属性,我们甚至可以设置它们对应的强度。镜面光贴图能够在漫反射贴图之上给予我们更高一层的控制。

step1. 对镜面光贴图使用一个不同的纹理单元(见纹理),在渲染之前先把它绑定到合适的纹理单元上:

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

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

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

step3. 采样镜面光贴图,来获取片段所对应的镜面光强度:

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);

也可以在镜面光贴图中使用真正的颜色,不仅设置每个片段的镜面光强度,还设置了镜面高光的颜色。从现实角度来说,镜面高光的颜色大部分(甚至全部)都是由光源本身所决定的,所以这样并不能生成非常真实的视觉效果(这也是为什么图像通常是黑白的,我们只关心强度)。

以上是关于光照 镜面光贴图示例的主要内容,如果未能解决你的问题,请参考以下文章

光照 光照贴图

光照 镜面光贴图示例

光照 镜面光贴图示例

光照 镜面光贴图示例

Vertex中实现每顶点光照的镜面高光效果

CG基本光照模型备忘