2008年的D3D学习笔记(1)
水曜日--direct3d初始化
2008/06/18 20:34
*ok,let's see: |
木曜日---DirectX流水线绘制
2008/06/20 16:49
绘制过程: #局部坐标系---->世界坐标系---->观察坐标系---->背面消隐---->光照---->裁剪---->投影---->视口坐标系---->光栅化; 其中有很多坐标变换的过程:使用借助矩阵来实现。 使用IDirect3DDevice9::SetTransform which has two parameters,一个用来描述变换类型,一个用来描述变换矩阵。 *局部坐标系(local space/modeling space):是用于定义构成物体的三角形单元列表的坐标系,可以简化建模过程。 *世界坐标系(world space):对位于局部坐标系中的物体通过一个世界变换到世界坐标系中。使用IDirect3DDevice9::SetTransform方法。将第一参数设为D3DTS_WORLD,第二个表示矩阵。 *观察坐标系(view space):实际上几何体和摄像机都是相对世界坐标系定义的,为了简化运算,我们将摄像机变换至世界坐标系的原点,并旋转,使其的光轴和世界坐标系的z轴一直。同时世界中所有几何体随之变换,得到其观察坐标系。观察坐标系使用D3DXMatrixLookAtLH函数得到。 *背面消隐(back culling):将几何体的背面消隐。要实现背面消隐,首先要判断哪些多边形是正面朝向的,哪些是背面朝向的。默认状态下,Direct3D认为顶点排序是顺时针的三角单元是正面朝向的,相反是背面朝向的。使用修改绘制状态D3DR_CULLMODE来达到背面消隐。Device->SetRenderState(D3DRS_CULLMODE,Value),in which the value can be D3DCULL_NONE(完全禁用背面消隐),D3DCULL_CW(只对顺时针的三角单元消隐),D3DCULL_CCW(默认,只对逆时针的三角单元消隐) *光照(lighting):使用光源照亮物体,是在世界坐标系中定义的,但是必须变换至观察坐标系才可使用。 *裁剪(clipping):用于剔除视野外的几何体。 *投影(projection):观察坐标系中,我们其实是要获取3D场景的2D表示,这就是投影的任务。我们实现的是透视投影,因为可以实现透视缩短(foreshortening)效果。使用D3DXMATRIX * D3DXMatrixPerspectiveFovLH函数来创建一个投影矩阵,使用IDirect3DDevice::SetTransform来实现。 *视口变换(viewpoint transform):其任务是将顶点坐标从投影窗口转换到屏幕的一个矩形区域中 which is called 视口。在游戏中,视口通常是整个矩形屏幕。视口使用结构D3DVIEWPORT9来表示。然后使用SetViewport方法来设置视口。 *光栅化(rasterization):绘制每个三角单元,计算构成其的每个像素的颜色值 |