凹凸纹理+镜面反射.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
凹凸纹理镜面反射

凹凸纹理+镜面反射 BumpMap(凹凸纹理)+Specular(镜面反射) /shallow_sleep/blog/item/9ce5ed0f619f892c6159f373.html 《游戏开发图形学》(《Shaders for Game Programmers and Artists》)的Specular(镜面反射)的算法是不正确的,《计算机图形学》相关部分才是正解。先写下Diffuse(漫反射),Specular(镜面反射)的特点和算法。 Diffuse(漫反射):自一个方向的光,经漫反射使光均匀向各方向传播。漫反射是由表面的粗糙不平引起的,与视点无关,漫反射光的空间分布是均匀的。 I=dot(L,N) L 从p点指向光源的向量 N 法线向量 Specular(镜面反射):对于理想镜面,反射光集中在一个方向,并遵守反射定律。对一般的光滑表面,反射光集中在一个范围内,且由反射定律决定的反射方向光最大。因此,对于同一点来说,从不同位置所观察到的镜面反射光强是不同的。将V和R都格式化为单位向量,可表示为: I=dot(R,V)的n次方 R 反射光向量 R=2N*dot(N,L)-L V 视线方向 n 为反射指数,反映了物体表面的光泽程度,一般为 1~2000,n越大物体表面越光滑 在反射方向附近形成很亮的光斑,称为高光现象 BumpMap(凹凸纹理):是一张纹理图,用(r,g,b)记录了各个点的法线方向(x,y,z)。从这个纹理获取法线从而计算光照而获得模型本不具有的细节。 需要用tangent(切线),normal(法线)和binormal构建一个该点的坐标系,把光线向量和向量从视口坐标系换到该坐标系中。然后进行上面计算。具体见书。 需注意的是需要加一个软件定义的float4x4 matView矩阵,不加摄像机的话需要用它把点的位置,切线向量,法线向量和binormal向量换算到该坐标系中,因为视口是不变的,但是在旋转物体中,实际上摄像机也就是眼睛的位置是改变的,不然镜面发射是无法随之而改变。RenderMonkey可以新建一个默认的bumpMap,可参考之。 Bump Mapping(/shallow_sleep/blog/item/4f43a9ce955fab31b700c85b.html) 同样是一个谣言众多的东西。思想可以见:RenderMonkey 笔记~6:Chapter10~BumpMap(凹凸纹理)+Specular(镜面反射) 《游戏开发图形学》(《Shaders for Game Programmers and Artists》)和《Interactive Computer Graphics》里的代码都是不对的,nehe所谓的BumpMap也只是使用了多重纹理,根本没有计算光线、法线和视线的关系(所以是没有明暗面的)。 最后改出来的效果也不是很好,光的亮度没有办法衰减,那种像火把照到石头墙上的效果还蛮难做的。 Bump Mapping中,是需要把物体上的点投射到视角的矩阵中,然后把光线向量和视线向量投射到以物体上某点为基准的坐标系中。 varying vec3 lightv; varying vec3 viewv; uniform vec3 camera; attribute vec3 tangent; attribute vec3 binormal; void main() { gl_Position=ftransform(); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; vec4 vPos=gl_ModelViewMatrix*gl_Vertex; vec3 vTangent=(gl_ModelViewMatrix * hvec4(tangent.x, tangent.y, tangent.z, 0.0)).xyz; vec3 vBinormal=(gl_ModelViewMatrix * hvec4(binormal.x, binormal.y, binormal.z, 0.0)).xyz; vec3 vNormal=(gl_ModelViewMatrix * hvec4(gl_Normal.x, gl_Normal.y, gl_Normal.z, 0.0)).xyz; mat3 TBNMatrix = mat3(vTangent, vBinormal, vNormal); lightv = camera.xyz-vPos.xyz; lightv *= TBNMatrix; viewv = camera.xyz

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档