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();
}
查看全文
相关阅读:
解决SharePoint 2010拒绝访问爬网内容源错误
Sharepoint 2010 工作流状态值
修改任务显示WrkTaskIp.aspx页面
Infopath 2013 通过UserProfileService读取AD用户信息
js验证
.net中下载文件的方法(转)
IIS限制ASP.Net 文件上传大小解决方案,修改IIS7/7.5配置
SharePoint2013 SharePoint-Hosted 模式 分页方法
技术QQ群
react学习
原文地址:https://www.cnblogs.com/Pointer/p/29444.html
最新文章
重装徒步临安三尖
秋游阳澄湖
婺源石城、长溪与理坑秋行散记
雨中重装徒步攀登清凉峰
Python 安装第三方库中常见问题总结
iOS ipa包瘦身---删除无用图片资源
Charles Map Local 中文显示乱码问题
React Native 获取组件(Component)在屏幕上的位置
IOS 消息转发
获取Xcode工程所有的类名
热门文章
MAC下如何显示隐藏文件
IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance
Xcode7 Cocoapods 安装或更新出现错误
将十六进制的字符串转化为UIImage
Umbraco 7 支持Microsoft Word 2013 发布内容
Umbraco 资源推荐
Umbraco 7 特点
如何简单快速的修改Bootstrap
nopCommerce 3.2新功能
Visual Studio Ultimate 2013
Copyright © 2011-2022 走看看