.plan

everybody lies

导航

2008年的D3D学习笔记(1)

水曜日--direct3d初始化

2008/06/18 20:34


#Directx
Direct3D
的初始化过程:
(1)
获取接口IDirect3D9 which is used 获取系统中物理硬件设备的信息并创建接口IDirect3DDevice9 which is a c++ object which 代表了我们用来显示3D图形的物理硬件设备的指针
(2)
检查设备性能(D3DCAPS9),判断主显卡是否支持硬件顶点计算
(3)
初始化D3DPRESENT_PARAMETERS结构 which is formed by 许多数据成员 which is used by us to 指定即将创建的接口IDirect3DDevice9的特性的一个实例。
(4)
利用已初始化的D3DPRESENT_PARAMETERS结构创建IDirect3DDevice9对象

*oklet's see
IDirect3D9
:用于获取系统中物理硬件设备信息
IDirect3DDevice9
:一个代表用于显示3D图形的物理硬件设备的C++指针
D3DPRESENT_PARAMETERS
:一个可以指定IDirect3DDevice9的特性的一个结构

 

 

木曜日---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):绘制每个三角单元,计算构成其的每个像素的颜色值

 

posted on 2009-07-22 23:04  housechen  阅读(728)  评论(0编辑  收藏  举报