有关 Direct3D技术的初步探索-------矩阵变换

来源:互联网 发布:北汽股份 营销网络 编辑:程序博客网 时间:2024/06/05 20:59

有关 Direct3D技术的初步探索-------矩阵变换

 

几何渲染管线把顶点作为输入,可进行3种变换:世界变换,摄像机变换和投影变换,并将这些变换施展到顶点。

1世界变换:

一个模型的顶点要从本地坐标系统变换到世界坐标系统。世界变换包含平移,旋转,缩放的 混合变换。目的要生成世界矩阵W,可由缩放矩阵S,旋转矩阵R,平移矩阵T混合生成,一般是先放缩,再旋转,后平移,W= S * R * T.

1 平移矩阵:

  通过执行函数D3DXMatrixTranslation( T , x , y , z )生成,x ,y ,z为模型在世界空间坐标。

   2 缩放矩阵

  通过执行函数D3DXMatrixScaling( S , x , y , z )生成,x, y, z分别为在各轴上的缩放倍数。

3旋转矩阵

    执行函数D3DXMatrixRotationX(& XR ,x)生成绕X轴旋转x 的旋转矩阵XR。

 执行函数D3DXMatrixRotationY(& YR ,y)生成绕Y轴旋转y 的旋转矩阵YR。

 执行函数D3DXMatrixRotationZ(& ZR, z)生成绕Z轴旋转z 的旋转矩阵ZR。

 执行函数D3DXMatrixRotationYawPitchRoll(&R ,& XR, & YR,& ZR)可得经过混合旋转的旋转 矩阵R。

 执行IDirect3DDevice9接口的SetTransform(D3DTS_WORLD,&W )设置世界矩阵。

2摄像机变换:

摄像机在世界空间中有一逻辑坐标和朝向,用于创建摄像机矩阵V的起点。

创建1:由平移矩阵和3个轴的旋转矩阵生成 V = T * XR * YR * ZR

创建2:执行函数D3DXMatrixLookAtLH( & V, eye , lookat , up ), eye为摄像机位置,lookat为摄像机朝向,up为顶方向。现讨论一下lookat的获取:

        lookat=eye+dir,而dir则是摄像机的观察方向,可由D3DXVec3TransformNormal(&dir,&olddir,&rot_mat)获得,olddir为原摄像机的观察方向,rot_mat为矩阵变量

        而rot_mat则由D3DXMatrixRotationYawPitchRol(&rot_mat,x,y,z)获取,

        x,y,z分别为在x,y,z轴的旋转分量.lookat可由上述几步骤计得。

执行IDirect3DDevice9接口的SetTransform( D3DTS_VIEW, &V )设置摄像机矩阵

3投影变换:

投影变换转换摄像机观察平截头体到立方体形状。

执行D3DXMatrixPerspectiveFovLH( & P , Fovy , Aspect , Znear , Zfar )生成投影矩阵P

Fovy 为视界,Aspect 为横纵比,Znear摄像机能观察到的最近距离,Zfar为最远距离。

执行IDirect3DDevice9接口的SetTransform( D3DTS_ PROJECTION, & P )设置投影矩阵

原创粉丝点击