xna shader编程教程19 – 半球环境光照

xna shader编程教程19 – 半球环境光照

ID:13561863

大小:233.00 KB

页数:3页

时间:2018-07-23

xna shader编程教程19 – 半球环境光照_第1页
xna shader编程教程19 – 半球环境光照_第2页
xna shader编程教程19 – 半球环境光照_第3页
资源描述:

《xna shader编程教程19 – 半球环境光照》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、XNAShader编程教程19–半球环境光照原文地址:http://digierr.spaces.live.com/blog/cns!2B7007E9EC2AE37B!639.entry。本教程我们将改变计算环境光的方法,这样可以获得比全局光更真实的效果。半球环境光照(Hemisphericambientlight)通常我们使用环境光强度和颜色计算环境光,这在大多数情况中工作良好,但我们想再真实一点。在真实世界中,我们看到的光线实际上是环境的反射,而不是个点光源。来自于天空、草地、汽车的光线是从某个表面反射而来的。

2、半球环境光是解决这个问题的一个简单方法。通过定义一个表示指向天空(表面以上的颜色)方向的向量,并计算这个向量和法线之间的夹角,我们可以获取表面反射的颜色。如果表面的法线向下,指向天空的向量向上(0,1,0),那么这个表面的颜色就是物体下面的地面的颜色。3/3图19.1红色的向量指向天空,黑色的向量是不同表面的法线。实现shader首先,我们需要声明一些变量。它们是指向天空的方向,天空的颜色,地面的颜色和半球光源的强度。//Setthedirectiontotheskyfloat3SkyDirection=float

3、3(0.0f,1.0f,0.0f);//Setgroundcolorfloat4Gc=float4(0.5f,1.0f,0.5f,1.0f);//Setskycolorfloat4Sc=float4(0.5f,0.5f,1.0f,1.0f);//SettheintensityofthehemispherecolorfloatHi=0.7f;天空颜色和地面颜色可以从一个立方贴图或某种形式的查询表中获取。然后,我们必须使用新的环境光方程:floatvecHemi=(dot(N,SkyDirection)*0.5f)+0

4、.5f;float4HemiFinal=Hi*lerp(Gc,Sc,vecHemi);return(Ai*Ac*HemiFinal*Color)+(Color*Di*Dd);首先我们计算SkyDirection向量和表面法线的点乘。然后基于SkyDirection和N的夹角对天空颜色和地面颜色进行插值并乘以半球环境光强度。3/3现在我们添加了环境光计算,我保留了原有的环境光,这样可以对环境光颜色有更多的控制,然后将它乘以半球光照。如果只想使用半球环境光照,我们可以使用以下光照方程:return(HemiFinal*

5、Color)+(Color*Di*Dd);好了。这就是教程的全部。我们所做的就是获取天空和法线之间的夹角,然后计算物体表面的颜色是取自天空、还是地面或是两者的插值。使用shader没什么新东西。参数是在shader中设置的,但也可以将参数作为全局变量从shader外进行设置。3/3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。