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;
程序清单
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相关推荐
- 深度学习(三十五)异构计算GLSL学习笔记(1)
异构计算GLSL学习笔记(1) 原文地址:http://blog.csdn.net/hjimce/article/details/51475644 作者:hjimce 最近开始学习深度学习的一些gpu ...
- Shader编程学习笔记(二)—— Shader和渲染管线
Shader和渲染管线 什么是Shader Shader,中文翻译即着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像,过去由汇编语言来编写,现在也可以使用高级语言来编写.一句话概括 ...
- Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板
写在之前 Shader变体.Shader属性定义技巧.自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用 ...
- cocos2d-x 3.1.1 学习笔记[15] Shader 著色器
首先须要两个文件 gray.fsh varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main() {vec4 v_orColor ...
- HLSL 学习笔记1 vertex shader, pixel shader
VERTEX SHADER 模板 //v2f 是输出结构,在前面定义了 v2f v(a2v In, uniform float4 lightPosition)//uniform 说明该数据来自shad ...
- OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...
- 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. ...
- OPenGL 学习笔记之 VAO VBO EBO 以及SHADER 并使用其绘制三角形
译注 在学习此节之前,建议将这三个单词先记下来: 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Eleme ...
- Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)
此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...
最新文章
- Android内容观察者
- 部署Office Web Apps Server并配置其与SharePoint 2013的集成
- 复杂知识库问答最新综述:方法、挑战与解决方案
- Android代码抄袭Java曝猛料 新证据出现
- 计算机软件相关的优秀基金,计算机软件研究所
- Oracle“ ORA-12162:TNS:net服务名称指定不正确”错误和解决方案
- 阻止原生输入中文拼音途中会触发input方法的问题
- 菠萝来啦。新一代VueX 来啦 他有一个特别甜的名字“Pinia”,再不学你就out了【 Pinia/Vuex5中文文档】
- 冬令时 java_java-时间处理夏令时冬令时跨时区问题处理
- 忠魁互联优化:头条SEO全网搜索营销怎么做?
- 由手机号绑定的账号,都应设置更换手机号功能
- 【C语言】五彩斑斓的颜色
- 输入年,月,输出这一年的这个月有多少天
- 为什么中国只有5%的景区暴利惊人?95%的景区却总是踩到陷阱!做文旅必须看懂此文!
- Metal 框架之 MTKView
- 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)
- Mybatis多表操作
- IJK 使用中遇到的问题
- 高分辨率影像卫星之美国
- 专业级智能PHP IDE Zend Studio教程:Zend Framework 2集成(1/3)——创建和部署新的ZF2项目
热门文章
- 预告 · Flutter Live 2018 全球同步直播
- Git Bash修改默认路径
- Spring Cloud - Feign调用问题
- vs code vue模板创建
- Linux查看进程线程个数
- 浅析SAAS数据模型设计(Oracle)
- uploadhandler.php,WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞
- 白话hash和数字签名,保证你看得懂
- 安卓java代码标签_Android实现动态添加标签及其点击事件
- 当前路径_[JSP] 07 JSP 路径问题