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
最新文章
20175315 《Java程序设计》第6周学习总结
转载---分布式系统测试
判断当前浏览器是否支持HTML5的日期控件
web杂记-禁止输入框自动填充文字
git杂记-分支简介
textarea的maxlength属性兼容解决方案
git杂记-打标签
git杂记-远程仓库的使用
git杂记-撤销操作
git杂记-查看历史提交
热门文章
git杂记-记录每次更新到仓库
浅谈ul布局以及table布局
(转)分布式文件存储FastDFS(三)FastDFS配置
(转)分布式文件存储FastDFS(二)FastDFS安装
(转) 分布式文件存储FastDFS(一)初识FastDFS
(转)淘淘商城系列——实现图片上传功能
(转)淘淘商城系列——分布式文件系统FastDFS
根据滚动条的高度来做相应的动作
登录后跳转回当前页
ajax使用案例
Copyright © 2011-2022 走看看