zoukankan      html  css  js  c++  java
  • Lambert 光照模型

    简介

    lambert 光照模型可以说是最简单的光照模型了. 主要考虑了 漫反射. 漫反射也单单考虑了经验模型.

    主要观察 面片渲染器(我是这么叫的)

    参考链接

    https://zhuanlan.zhihu.com/p/191561026
    https://zhuanlan.zhihu.com/p/144681176

    code

    #version 420 
    out vec4 FragColor;
    in vec3 pos;
    in vec3 color;
    uniform int colormode = 1;
    uniform int drawmode = 1;
    void main() {  
    	if(colormode == 0){
    		FragColor = vec4(color,1.0);
    	} else if (colormode == 1) {
            if(drawmode == 0){
                FragColor = vec4(0.25,0.25,0.25,1.0);
            } else {
                vec3 n = normalize(cross(dFdx(pos),dFdy(pos)));
    	    vec3 lposition = vec3(0.0f,0.0f, 255f);
                vec3 viewposition = vec3(0.0f,0.0f, 0.5f);
    
                float f = 0.6f;
                float ambient_light_coefficient = 0.4f;
                vec3 ambient = vec3(0.6f, 0.6f, 0.6f);
                vec3 lightDir = normalize(lposition - pos);
                vec3 color_diffuse = ambient * max(0.0, dot(n, lightDir)) * f;
    
                FragColor = vec4(color_diffuse,1.0);
            }
    	} else {
            FragColor = vec4(1.0, 0.0, 0.0, 1.0);
        }
    }
    

    核心代码讲解

    vec3 color_diffuse = ambient * max(0.0, dot(n, lightDir)) * f;

    漫反射 = 光照强度(环境光) * 光照向量和物体表面法向量的余弦值 * 反射系数;
    注: 余弦值是正值, 最小值为0, 表示没有光照影响.
    注: 余弦值的计算为 两个单位向量的点乘.

    [diffuse = light_{ambient} * | cos heta | * f; ]

    image

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    ASP.NET(C#)——唯一订单号
    Oracle——备份与还原
    ASP.NET(C#)——日期函数
    数据安全——数据安全标准
    文件内容的追加
    文件的读取
    创建文件,写文件
    遍历文件改进
    遍历文件夹
    递归方法求前n项和
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/15517700.html
Copyright © 2011-2022 走看看