美文网首页OpenGL学习笔记
【四十三,光照-材质02设置材质】

【四十三,光照-材质02设置材质】

作者: Woodlouse | 来源:发表于2019-12-10 23:08 被阅读0次

    设置材质

    在上一节中我们了解了不同的材质对光的的变现是不同的,通过定义一个结构来表示材质对光的敏感性。在这一节中我们将定义的材质应用到程序中。

    着色器的开发
    顶点着色器可以沿用之前的,修改的是片段着色器。

    1. 定义材质属性

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

    2. 应用材质属性

        // Ambient
        vec3 ambient = lightColor * material.ambient;
        
        // Diffuse
        vec3 norm = normalize(Normal);
        vec3 lightDir = normalize(lightPos - FragPos);
        float diff = max(dot(norm, lightDir), 0.0f);
        vec3 diffuse = lightColor * (diff * material.diffuse);
        
        //Specular
        vec3 viewDir = normalize(viewPos - FragPos);
        vec3 reflectDir = reflect(-lightDir, norm);
        float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
        vec3 speclular = lightColor * (spec * material.specular);
        
        vec3 result = ambient + diffuse + speclular;
        color = vec4(result, 1.0f);
    

    3. 在代码中设置材质属性的值

    GLS中的结构体没有什么特别之处,填充结构体时设置结构体中的各个元素的uniform值即可:

        m_pShader->setVec3("material.ambient", 1.0f, 0.5f, 0.31f);
        m_pShader->setVec3("material.diffuse", 1.0f, 0.5f, 0.31f);
        m_pShader->setVec3("material.specular", 0.5f, 0.5f, 0.5f);
        m_pShader->setFloat("material.shininess", 32.0f);
    

    4. 运行效果

    应用材质

    设置材质代码

    相关文章

      网友评论

        本文标题:【四十三,光照-材质02设置材质】

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