zoukankan      html  css  js  c++  java
  • GLSL学习笔记 6.2 Vertex Shader

    一个简单的逐顶点光照模型。光照效果由散射光和镜面反射光构成。

    程序流程
    转化顶点与法线到当前的眼坐标系中
    vec3 ecPosition   
    = vec3 (gl_ModelViewMatrix * gl_Vertex);
    vec3 tnorm        
    = normalize(gl_NormalMatrix * gl_Normal);

    得到 顶点->光源向量 与 顶点
    ->观察点向量
    vec3 lightVec     
    = normalize(LightPosition - ecPosition);
    vec3 viewVec      
    = normalize(-ecPosition);

    根据 入射光线向量 计算反射光线向量
    vec3 reflectVec   
    = reflect(-lightVec, tnorm);

    假设漫反射光线强度随入射光线与法线夹角呈余弦分布,
    则漫反射光照强度可以近似为
    float diffuse     = max(dot(lightVec, tnorm), 0.0);

    假设镜面反射光线强度随反射光线与观察方向夹角呈余弦分布,
    则镜面反射光照强度可以近似为
    spec              
    = max(dot(reflectVec, viewVec), 0.0);
    随后增强镜面反射聚集度
    spec              
    = pow(spec, 16.0);

    最后通过混合散射光与镜面光强度获得该顶点光线强度
    LightIntensity    
    = DiffuseContribution * diffuse + SpecularContribution * spec;


    程序清单
    uniform vec3 LightPosition;

    const float SpecularContribution = 0.3;

    const float DiffuseContribution  = 1.0 - SpecularContribution;

    varying 
    float LightIntensity;

    varying vec2  MCposition;

    void main(void){
        vec3 ecPosition 
    = vec3 (gl_ModelViewMatrix * gl_Vertex);
        
        vec3 tnorm      
    = normalize(gl_NormalMatrix * gl_Normal);

        vec3 lightVec   
    = normalize(LightPosition - ecPosition);

        vec3 reflectVec 
    = reflect(-lightVec, tnorm);

        vec3 viewVec    
    = normalize(-ecPosition);

        
    float diffuse   = max(dot(lightVec, tnorm), 0.0);

        
    float spec      = 0.0;

        
    if (diffuse > 0.0){
            spec 
    = max(dot(reflectVec, viewVec), 0.0);
            spec 
    = pow(spec, 16.0);
        }


        LightIntensity  
    = DiffuseContribution * diffuse + SpecularContribution * spec;

        MCposition      
    = gl_Vertex.xy;
        
        gl_Position     
    = ftransform();
    }



  • 相关阅读:
    登陆跳转回原来页面
    magento获取当前浏览器的url和对url判断处理
    Magento获取购物车所有信息
    magento查询商品库存
    金额转换成0.00的形式
    Magento网站运行原理解析
    linux下如何禁用root账户直接登陆
    web前端常用的10个jQuery特效总结
    js函数
    网站css
  • 原文地址:https://www.cnblogs.com/Pointer/p/29444.html
Copyright © 2011-2022 走看看