3D中的绘制流水线(Render/Display的工作流程)
1.局部坐标系(Modeling space)
2.世界坐标系(World space)
世界变换:
1.缩放
2.旋转
3.平移
Device->setTransform(D3DTS_DORLD, &mat4);
3.观察坐标系(View space)
取景变换
1.将摄像机变换致世界坐标系的原点
2.将摄像机旋转,使其与世界坐标系z轴正方向一致
3.世界空间中的所有几何物体也都随着摄像机一同变换,以保证摄像机的视场恒定
D3DXMatrixLookAtLH(&matOut, &vEye, &vAt, &vUp);
Device->SetTransfrom(D3DTS_VIEW, &matOut);
4.背景消隐(Backface culling)
将3D场景中的物体的摄像机看不到的部分剔除(物体的背面)
Device->setRenderState(D3DRS_CULLMODE);
5.光照(Lighting)
1.在世界坐标系中定义光源
2.必须经取景变换到观察坐标系才可使用
6.裁剪(Clipping)
将视域体外的几何图形剔除
7.投影(Projection)
投影变换
1.将n维变换为n-1维的过程叫做投影,即将3D场景转成2D表示
2.定义了视域体:摄像机所能看到的最近/远的地方,纵横比等(一般为屏幕(Client)的宽和高比)
D3DXMatrixPerspectiveFovLH(&pMatProj, fovY, Aspect, zn);
Device->SetTransform(D3DTS_PROJECTION, &pMatProj);
8.视口变换(viewport transform)
1.将投影窗口转换到屏幕的某个区域中
2.该区域称之为视口(viewport)
Device->SetViewport(&vp);
9.光删化(rasterization)
将数据和纹理计算成屏幕的图像(各个像素)