透视投影变换由四个量决定:前裁剪平面的宽度w;前裁剪平面的高度h;前裁剪平面到原点的距离z1;后裁剪平面到原点的距离z2。
由于w、h 用起来不是很直观,因此实际应用中,常用fov 和aspect 代替w、h,其中fov 是Y 方向上的可视角度,通常取π/4 ;aspect 是前裁剪平面的高度与宽度之比,通常取1(由三角函数定义,易知 h=2•z1•tg(fov/2),w=h/aspect)。用这四个量来调用函数D3DXMatrixPerspectiveFovLH,即可获得投影变换矩阵。
得到三个变换矩阵后,还需要调用方法IDirect3DDevice9::SetTransform 把它们设置到渲染环境中。
最后,可以用三句话来概括这些变换的作用:世界变换决定实体的位置;视角变换决定观察者的位置;投影变换决定观察者的可视区域。
2.4.5 纹理
只有材质的实体看上去就象塑料制品,还不足以反映我们这个五彩缤纷的世界,为此Direct3D 引入了纹理(Texture )技术。纹理也就是通常所说的贴图,它通过在三文的模型表面覆盖上二文的图片,使实体更具有真实感,比如在家具表面贴上木纹,或者把草、泥土和岩石等图片贴在构成山的图元表面,以得到一个真实的山坡。图11(a)中,左边是使用纹理的战斗机模型,右边没使用纹理,显然左图更真实一些。Direct3D 支持多层纹理,最高可达8层。
图11(a):纹理效果
纹理都是一些标准的位图,支持BMP、JPG、PNG、TGA 等格式。虽然Direct3D 对纹理图片的大小没有限制,但为了程序的执行效率,最好使用正方形图片,而且边长是2 的n次方,比如64 x 64、128 x 128、256 x 256 等等。
1)纹理坐标
纹理图片本身构成了一个二文的坐标空间,纹理坐标(Texture Coordinate)用于在纹理上指定一个点,如图11(b)所示,其中u为横坐标,v 为纵坐标。不论纹理的大小如何,其左上角总是(0,0),右下角总是(1,1),易知中心点的纹理坐标为(0.5,0.5)。
图11(b)
当把纹理应用于图元时,需要为每个顶点指定一组纹理坐标,标明该顶点在贴图中的位置,从而建立起图元和纹理图片之间的映射关系。
2 )纹理滤波
纹理滤波(Texture Filtering)是指纹理图片映射到图元的方式,Direct3D 支持以下方式:最近点采样;双线性滤波;各向异性滤波;Mipmap 滤波。
其中最近点采样是Direct3D中的缺省方式,速度快、但效果一般,可以通过 IDirect3DDevice9::SetSamplerState 来改变滤波方式。
3 )纹理混合
当使用纹理时,实体的外观由纹理图片和材质经过某种计算获得,这个过程被称作纹理混合(Texture Blending )。
2.4.6 渲染
在Direct3D 中,一个设备对象至少包含两个显示缓存区:当前缓存区(Front Buffer)和后备缓存区(Back Buffer),前者可以看成Direct3D 窗口的映射。当我们渲染图形时,实际上并不是直接在窗口上输出,而是在后备缓存区上绘图。渲染完毕后,交换两个缓存区,使原来的后备缓存区变成当前缓存区,从而实现窗口刷新,如图12所示。快速重复此过程, 就会在屏幕上形成连续的动画。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
玫瑰根系模拟仿真及建模 第6页下载如图片无法显示或论文不完整,请联系qq752018766