第六集 纹理映射技术
为使建立的3D模型更接近现实世界中的物体, 简单的颜色变换已经无能为力, 这时我们就需要纹理映射技术了.
这一集我们讲解基础的纹理映射技术的数学模型, 对于在粒子系统使用的过程纹理技术在高级部分讲解.
6.1 二维纹理映射
6.1.1 纹理映射的简单建模
二维纹理映射就是从二维纹理平面到三维物体表面的映射. 一般二维纹理平面是有范围限制的, 在这个平面区域内, 每点都可用数学函数表达, 从而可以离散的分离出每点的灰度值和颜色值, 这个平面区域称为纹理空间, 一般将纹理空间的平面区域定义在[0, 1] * [0, 1].
纹理映射是确定物体表面一点P在纹理空间中的对应点(u, v), 从而纹理空间中的点(u, v)处的纹理值就是物体表面点P的纹理属性. 这样屏幕上显示的像素的颜色可通过下面的映射得到,
F : Screen Space --> Object Space
G : Object Space --> Texture Space
其中F我们在第二集中已详细讲解过, 所以我们关心的是G. 只要确定了物体表面的纹理属性, 接着就是将物体表面上各点所对应的纹理值作为光照明模型中的相应参数进行光强度计算, 再绘制画面.
所以G函数的定义直接影响画面的效果, 如何确定G非常重要. G可表示为,
(u, v) = H(x, y, z)
其中(u, v)和(x, y, z)分别是纹理空间和物体空间中的点. 现在从简单的圆柱开始, 一个高h, 半径为r的圆柱的纹理映射方法, 我们用参数形式表示圆柱,
x = r * cos a
y = r * sin a
z = h b
0 <= a <= 2PI, 0<= b <= 1
从纹理空间 [0, 1] * [0, 1] 到 [0, 2PI] * [0, 1] 的线性变换为,
u = a / 2PI
v = b
这样, 我们建立了物体空间到纹理空间映射的表达式. 如图6.1
图6.1
物体表面没有象圆柱一样, 所以上面的方法不实用.
6.1.2 两步法纹理映射
1986年, Bier和Sloan提出了一种独立于物体表面的纹理影射技术, 将纹理空间到物体空间的映射分为两个简单的映射复合. 两步法纹理映射的核心是引进一个包围物体的中介三维曲面作为中间映射媒体, 主要过程分两步,
(a). 将二维纹理映射到一个简单的三维物体表面, 如平面, 球面, 圆柱面, 立方体表面, 采用不同的中间映射媒体生成的纹理效果是不同的, 要根据目标物体表面来选择.
S : (u, v) --> (x', y', z') --- S-映射
如半径为R的球的S-映射为,
x = R * cos a * sin b
y = R * sin a * sin b
z = R * cos b
(0 <= a <= 2PI, 0<= b <= PI)
(b). 将(a)的三维物体表面上的纹理映射到目标物体表面,
O : (x', y', z') --> (x, y, z) --- O-映射
O-映射一般有4种, 如图6.2,
图6.2
(1). 取视线在物体表面可见点(x, y, z)处的反射与
中间映射媒体表面上的交点(x', y', z')作为
(x, y, z)的映射点.
(2). 取物体表面可见点(x, y, z)处的法线与中间映射
媒体表面上的交点作为映射点.
(3). 取物体中心到可见点(x, y, z)的射线与中间映射
媒体表面上的交点作为映射点.
(4). 中间映射媒体表面上的点(x', y', z')处的法线
与物体表面的交点为(x, y, z), (x', y', z')