在DirectX中要实现绘制,就要进行一系列的运算,统称为绘制流水线,(rendering pipeline ),一个简单的流水线的大致流程是:
局部坐标系-〉世界坐标系-〉观察坐标系-〉背面消除-〉光照-〉裁减-〉投影-〉视口坐标系-〉光栅化
这一流程中的前两个部分还好理解,后面就有点特别了。实际中,我们可以把摄像机定义在任何位置,但是这样会导致后面的投影变换和其他的矩阵变换效率不高,所以我们需要作一些矩阵运算把摄像机移动到原点,其他的物体相对摄像机不动:
D3DVECTOR position(1.0f,2.0f,3.0f);//摄像机的位置
D3DVECTOR lookat(0.0f,0.0f,0.0f);盯着哪个点看
D3DVECTOR updir(0.0f,1.0f,0.0f);你的头向着那个方向
D3DMATRIX viewMatrix;
D3DMatrixLookAtLH(&viewMatrix,&position,&lookat,&updir);生成矩阵
Device->SetTransform(D3DTS_VIEW,&viewMatrix); 应用矩阵
视口变换是将顶点坐标转化为屏幕上的坐标:
D3DVIEWPORT9 viewport = {0,0,SCREENWIDTH,SCREENHEIGHT,0,1};
Device->SetViewport(viewport);