立方图纹理与环境贴图

一,立方图纹理。

立方图纹理是一种三维纹理。其纹理坐标是3D的。该坐标的实质是一个由立方体中心发出的向量。该向量会与四周的六个贴图之一相交,交点即为对应的纹素。从本质上讲,立方图纹理是6个2D纹理,具体地讲,对于坐标(-3,-2,1),由于x坐标绝对值最大,因此向量指向-x方向的那个贴图。y和z坐标转换到(0,1)后,即是-x方向上的2D纹理的坐标值。

 

立方图纹理的操作与2D纹理基本相同,唯一的区别是tex2D改为texCUBE。

二,环境贴图。

立方图纹理的主要作用之一是环境贴图。许多物体都具有部分的镜面效果,如金属,崭新的车辆等。它们实际上是反射了周围环境的颜色,这种效果便是通过反射环境贴图的颜色实现的。

 

三,天空球的绘制。

我们可以以视点为中心绘制一个巨大的球体,然后将环境贴图贴到球体的内表面,这样,球体就代表了周围的环境。由视点到球面顶点的向量便是3D纹理坐标。

 

注意绘制时取消背面剔除,这样便不用考虑顺时针还是逆时针的问题。

 

还要注意在进行世界视点和投影变换后将球面顶点的z坐标设置为与w坐标相同,这样在进行透视除法之后,z值为1,即深度值为1,从而避免了天空球被裁剪和天空球遮挡了其他物体的情况。

 

在这里有一个小技巧。由于天空球的深度值全部为1,因此,在所有物体当中先绘制天空球,在绘制天空球的时候可以利用其深度值来清空深度缓存,(并同时清空模板缓存,)从而节省了单独清空深度缓存的一点点开销。

 

四,光洁物体半镜面效果的实现。

根据由视点指向物体顶点的向量和顶点法线可计算出反射向量,该反射向量的坐标便是物体顶点所对应的环境贴图的3D纹理坐标。我们可以逐像素的计算3D纹理坐标,这样就需要向PS传递法向量,世界坐标系中的顶点坐标。

 

我们需要定义一个变量reflectivity,用来描述物体的反射强度,显然,当该值取1时,物体具有完全的镜面效果,当该值取0时,物体不反射任何周围环境的颜色。

 

计算出对应的环境贴图颜色后,分别通过reflectivity和ambient,diffuse混合,spec不必,以免减弱镜面反射效果。

 

变量reflectivity应设置成material结构的数据成员,因为不同的物体反射强度不同。

 

还有一些物体在不同部位的反射强度不同,我们可以逐像素的设置该变量,可通过美工制作reflectivity图完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值