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

程序流程

转化顶点与法线到当前的眼坐标系中
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();
}

转载于:https://www.cnblogs.com/Pointer/archive/2004/08/02/29444.html

GLSL学习笔记 - 6.2 Vertex Shader相关推荐

  1. 深度学习(三十五)异构计算GLSL学习笔记(1)

    异构计算GLSL学习笔记(1) 原文地址:http://blog.csdn.net/hjimce/article/details/51475644 作者:hjimce 最近开始学习深度学习的一些gpu ...

  2. Shader编程学习笔记(二)—— Shader和渲染管线

    Shader和渲染管线 什么是Shader Shader,中文翻译即着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像,过去由汇编语言来编写,现在也可以使用高级语言来编写.一句话概括 ...

  3. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板

    写在之前 Shader变体.Shader属性定义技巧.自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用 ...

  4. cocos2d-x 3.1.1 学习笔记[15] Shader 著色器

    首先须要两个文件 gray.fsh varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main() {vec4 v_orColor ...

  5. HLSL 学习笔记1 vertex shader, pixel shader

    VERTEX SHADER 模板 //v2f 是输出结构,在前面定义了 v2f v(a2v In, uniform float4 lightPosition)//uniform 说明该数据来自shad ...

  6. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  7. Unity3D学习笔记3——Unity Shader的初步使用

    文章目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. ...

  8. OPenGL 学习笔记之 VAO VBO EBO 以及SHADER 并使用其绘制三角形

    译注 在学习此节之前,建议将这三个单词先记下来: 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Eleme ...

  9. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

最新文章

  1. Android内容观察者
  2. 部署Office Web Apps Server并配置其与SharePoint 2013的集成
  3. 复杂知识库问答最新综述:方法、挑战与解决方案
  4. Android代码抄袭Java曝猛料 新证据出现
  5. 计算机软件相关的优秀基金,计算机软件研究所
  6. Oracle“ ORA-12162:TNS:net服务名称指定不正确”错误和解决方案
  7. 阻止原生输入中文拼音途中会触发input方法的问题
  8. 菠萝来啦。新一代VueX 来啦 他有一个特别甜的名字“Pinia”,再不学你就out了【 Pinia/Vuex5中文文档】
  9. 冬令时 java_java-时间处理夏令时冬令时跨时区问题处理
  10. 忠魁互联优化:头条SEO全网搜索营销怎么做?
  11. 由手机号绑定的账号,都应设置更换手机号功能
  12. 【C语言】五彩斑斓的颜色
  13. 输入年,月,输出这一年的这个月有多少天
  14. 为什么中国只有5%的景区暴利惊人?95%的景区却总是踩到陷阱!做文旅必须看懂此文!
  15. Metal 框架之 MTKView
  16. 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)
  17. Mybatis多表操作
  18. IJK 使用中遇到的问题
  19. 高分辨率影像卫星之美国
  20. 专业级智能PHP IDE Zend Studio教程:Zend Framework 2集成(1/3)——创建和部署新的ZF2项目

热门文章

  1. 预告 · Flutter Live 2018 全球同步直播
  2. Git Bash修改默认路径
  3. Spring Cloud - Feign调用问题
  4. vs code vue模板创建
  5. Linux查看进程线程个数
  6. 浅析SAAS数据模型设计(Oracle)
  7. uploadhandler.php,WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞
  8. 白话hash和数字签名,保证你看得懂
  9. 安卓java代码标签_Android实现动态添加标签及其点击事件
  10. 当前路径_[JSP] 07 JSP 路径问题