最近刚看完《cg教程-可编程实时渲染权威指南》这本书,对照之前写的纹理的文章,现在从渲染管线角度加深了理解,再重新整理一遍图形学中纹理映射。

一:alpha mapping

  简单来说就是用带透明通道的图片进行纹理贴图,主要用例为树,其实就是两个互相垂直的矩形都贴上贴图,但要使透明的alpha不被显示出来

二:light mapping

  就是用一张光照图片和另一张图片进行混合,模拟有光照的样子,NEHE的opengl教材中第七章就属于典型的例子

三:环境映射(environment mapping)

  通过视线和法向量计算出入射光线,通过此入射光线在纹理盒(CubeTexture)中查找到相应的像素,D3D和OpenGl用相应的API从dds文件中生成CubeTexture,HLSL/Cg中用texCube()函数进行采样。如果是实现折射则根据折射率计算出折射光线(而不是入射光线),反射和折射的结合能模拟出非常真实的镜面效果(比如水)

四:凹凸映射(bump mapping)

  1 浮雕凹凸纹理 将原图复制一份进行相应的便宜然后相加,产生具有立体感的图片,photoshop中也有类似的技法(老式的方法,现在3D程序较少用到)。

  2 法向凹凸纹理 就是用一张贴图存储凹凸信息,即高度,然后通过D3D中的生成工具得到法向贴图(利用RGB的0~255的颜色信息映射到0~1三维向量作为法向向量),将法向作用于片段程序进行光照计算,得到凹凸的样子,其实网格还是原来的样子(法向贴图作用于片段程序而不是顶点程序)。该技术主要的难点是将每个三角形的光照计算转换到纹理坐标(事先生成的法向贴图的坐标系统与顶点坐标系统是不同的,否则出错)

五:投影映射(project mapping)
  1 一般纹理映射 相当于把一张纹理想象成一个矩形的投影仪,这个投影仪将图案投射到物体上,投影的计算和我们摄像机的坐标转换是一样的,通过世界、投影矩阵得到纹理坐标,然后通过Tex2DProj()函数得到纹理值(Tex2DProj与Tex2D的区别在于除以的齐次坐标系数q),这个技术没有处理遮挡效果(例外要注意背面投影的去除)

  2 阴影映射(shadow mapping)  比一般纹理隐射多一个渲染过程,第一次渲染过程将最靠近眼睛的坐标z轴存在一张深度纹理中(创建过程http://www.cnblogs.com/a-pal/archive/2012/09/09/2678107.html),后面的过程就和一般纹理映射代码基本相同,当显卡知道这是一张深度纹理时调用Tex2DProj不是进行颜色采样,而是进行深度比较,深度较大的就说明在阴影中,返回黑色(0,0,0,1),否则返回白色(1,1,1,1)(如果设置了双线性过滤的话效果更好,返回的颜色会在白色和黑色中有一定颜色过渡。

 

posted on 2011-10-01 18:10  云 溪  阅读(2356)  评论(0编辑  收藏  举报