09 January 2011
DirectX学习笔记。
  1. D3D中任何复杂的图形由什么图元组成: 三角形
  2. 向量的属性包括:长度 和 方向
  3. 三维空间的变换:(3种)平移、放缩、旋转
  4. 像素的格式: ARGB 和 XRGB (常用)
  5. 如果贴上图片,顶点格式必须有D3DFVF_TEX1,取值范围[0,1] 。
  6. 最基础的对象是 D3D对象,由它创建 Device ,再由Device创建索引、顶点等。
  7. 创建和释放应符合 栈(先进后出) 的顺序。
  8. D3D在设备创建时选择两种方式,用硬件是 HAL ,用软件是 REF 。
  9. 表示纯红颜色的颜色的常量是: 0xFFFF0000
  10. 在D3D中,本地空间指 局部坐标系,世界空间指 世界坐标系 。
  11. 使用索引缓冲区相对于顶点缓冲区的优点: 对于可重用的点,用索引代替,省去重复空间。
  12. D3D中,绘制基本图元的函数是: DrawPrimitive()。
  13. 实现光照的效果需要通过光照和模型的 法线 来实现。法线分为 顶点法线 和 面法线。
  14. D3D中,顶点是程序员的定义格式,叫做: 灵活顶点格式(FVF),FVF的值必须与 顶点结构体 一一对应。
  15. 处理纹理坐标的值在 (0,1) 边界外,纹理坐标的方式叫 纹理寻址。三种纹理寻址的方式: 包装、边框、镜面、夹取。
  16. D3D中,模型表面的材质是指 物体表明对光的反射能力 ,也包括 α通道。
  17. 在DX中,渲染需要占用大量的CPU时间,要想获得稳定的帧速率,调用 PeekMessage()。
  18. 只要不去修改,就会一直保持状态,则这些状态叫做 开关量。
  19. 设置渲染状态的函数是SetRenderState()。
  20. 纹理尺寸最好符合什么标准? 长宽最好是2的n次幂,矩形也行。
  21. DX最多支持同时 8 个光源, 8 层纹理。
  22. DX中正确体系物体遮挡关系,使用 Z-Buffer(深度缓冲)。
  23. 为了增加场景的真实感,通常添加 雾效。
  24. DX中,专门封装了一个处理2D图形的接口:D3DXSprite

  1. DX图形库的开发方式,使用这种机制有什么好处? DX图形库的开发方式是基于Windows的COM机制(ComponentObject Model组件对象模型)。COM对象是对一组特定功能的抽象集合,应用程序不能直接访问COM对象,而是必须通过COM对象接口(Interface)的指针执行COM对象的功能。 使用这种机制的好处是:
    • COM接口永远不会改变
    • COM是独立于语言的(language-independent)
    • COM只能通过方法来访问,而不能直接访问数据成员。
  2. DX程序运行的基本流程是什么?
    1. 创建窗口
    2. 创建D3D对象
    3. 创建图形
    4. 载入资源
    5. 设置变换
    6. 设置状态
    7. 在BeginScene()和EndScene()之间绘制
    8. 创建图元
    9. 销毁图元
    10. 销毁窗口
  3. 简述光的类型以及特性。

    光的类型有:环境光、漫反射光、镜面反射光 环境光:是经其他表面反射到达物体表面,并照亮整个场景。这时物体并不处于光源的直接照射下,照亮物体的光是其他物体反射到该物体上的光线。光线经过多次折射后看起来就像是来自四面八方一样,这种光不依赖于光源的位置。 漫反射光:有特定的传播方向,但当它到达某一表面时,将沿着各个方向均匀反射。这种光无论从哪个方位观察,表面亮度均相同,所以无须考虑观察者的位置,仅需考虑光传播的方向以及表面的朝向。从一个光源发出的光一般都是这种类型的。 镜面反射光:用于显示物体表面(光滑和光泽表面)的高光效果,有特定的传播方向。但当它到达一个表面时,将严格的沿着另一个方向反射。是只能在一定的角度范围内才能观察到的高亮度照射。因为光照均沿着同一个方向反射,所以不仅要考虑光的入射方向和表面的朝向,还需要考虑观察者的位置。

  4. 简述α混合和α测试的原理,相同点和不同点。

    α通道就是记录像素的透明度。 α混合:先绘制目标颜色,再绘制源颜色,用两个颜色值分别乘以各自的α系数再相加,即得到最后的颜色。所以,最终颜色里既包含了源颜色又包含的目标颜色。 α测试:设置一个测试函数,把参考值和将要测试按照比较函数来运算,通过测试的颜色显示出来,未通过测试的颜色不显示出来。

    按照“Alpha”混合向量的值来混合源像素和目标像素。是一种让3D物件产生透明感的技术。若3D环境中像素拥有一个α通道,记载像素的透明度。就是处理两个物件在萤幕画面上叠加的时候,还会将α值列入考虑,使其呈现接近真实物件的效果。

    具体就是: 第一步,先把源像素和目标像素的RGB 三个颜色分量分离,然后把源像素的三个颜色分量分别乘上Alpha 的值,并把目标像素的三个颜色分量分别乘上Alpha 的反值,接下来把结果按对应颜色分量相加,再对最后求得的每个分量结果除以Alpha 的最大值,最后把三个颜色分量重新合成为一个像素输出。 透过那些透明度非常高的物体看其他物体,例如透过几乎完全透明的玻璃看其他物体,会感到玻璃好像不存在,在三维图形程序中渲染时就可以不渲染这些透明度非常高的物体,从而可以提高渲染速度,这可以通过alpha测试来实现。

    alpha测试根据当前像素是否满足alpha测试条件(即是否达到一定的透明度)来控制是否绘制该像素,图形程序应用alpha测试可以有效地屏蔽某些像素颜色。与alpha混合相比,alpha测试不将当前像素的颜色与颜色缓冲区中像素的颜色混合,像素要么完全不透明,要么完全透明。由于无需进行颜色缓冲区的读操作和颜色混合,因此alpha测试在速度上要优于alpha混合。 相同:都要使用到Alpha通道 不同:Alpha混合中,无论无题Alpha值的大小,只要》0,就会保留附体的像素值,使它能在屏幕上显示 Alpha测试则是一种非此即彼的选择,设置一个参考值,给出一个测试方法,对每一个物体进行测试。当物体Alpha值>参考值,保留其在屏幕上的显示,反之则不显示。

  5. 简述基本图元的类型和使用方法。
    • 点列(D3DPT_POINTLIST):点列由一系列的顶点组成。按照在顶点结构体数组的标识的点的位置画出单个点。
    • 线列(D3DPT_LINELIST):线列由一系列的线段组成。D3D依次读取两个点来构成一个图元,即一条线段。
    • 线带(D3DPT_LINESTRIP):线带由一系列的线段组成,前一个线段的终点是下一条线段的起点。D3D依次读取一组(2个)顶点画出一条线段,上一组的最后一个顶点是下一组的第一个顶点。
    • 三角形列(D3DPT_TRIANGLELIST):三角系列由一系列的三角形组成。D3D依次读取一组(3个)顶点画出一个三角形,只要顶点声明的不一样,各组中就没有任何一个顶点相同,但是当D3D读取的三个构成三角形的三个点是逆时针时,在默认情况下就不绘制该三角形。
    • 三角形带(D3DPT_TRIANGLESTRIP):三角形带又一系列的三角形组成,除了第一个三角形,其他的三角形只需要输入第三个顶点,其他两个顶点与前一个三角形重合。D3D依次读取一组(3个)顶点来构造一个三角形,后一组和前两个顶点时前一组的后两个顶点,在这种模式下,D3D保证在默认情况下以顺时针来画三角形。
    • 三角形扇(D3DPT_TRANGLEFAN):三角形扇也是由一系列的三角形组成,每两个三角形有两个顶点重合。D3D读取顶点数组中的第一个顶点作为三角扇的顶点,然后依次读取一组(2个顶点),前一组的第二个顶点是后一组的第一个顶点,若顶点顺序为逆时针时,在默认情况下仍然不画出。

    绘制函数

     HRESULT DrawPrimitive(          
     D3DPRIMITIVETYPE PrimitiveType,                              //基本图元类型
         UINT StartVertex,                                                      //起始顶点
         UINTPrimitiveCount                                     //绘制的图元的数量
     );
    	 
     g_pDevice->DrawPrimitive(type,startvertex,vertexnumber);
    
  6. DX中非其次坐标顶点同三维空间坐标通过变换显示到2D上,经历了那几个变换?摄像机有几大要素,每个要素的含义。
    • 对每个物体建立局部坐标系
    • 将每个物体铜鼓偶世界变换的运算变换到世界坐标系。
    • 几何体和摄像机都是嫌贵世界坐标系定义的,将摄像机变换至世界坐标系的原点,并将其旋转,使摄像机的光轴与世界坐标系Z轴正方向一致。
    • 通过投影将3D场景用2D表示
    • 用视口变换把投影窗口转换到屏幕的一个矩形区域中。

    三大要素:视点、焦点、正方向

  7. 介绍DX渲染管线的流程。
    • 建立局部坐标系:用于定义构成物体的三角形单元列表的坐标系。此时,构建模型时无需考虑位置、大小、或相对于场景中其他物体的朝向。
    • 建立世界坐标系:将位于自身局部坐标系中的物体组织在一起构成世界坐标系中的场景。通过平移、旋转以及比例运算,分别设定该物体在世界坐标系中的位置、方向以及模型的大小。
    • 观察坐标系:我们将摄像机变换至世界坐标系的原点,并将其旋转,使摄像机的光轴与世界坐标系z轴正方向一致。同时,世界空间中的所有几何体都随着摄像机一同进行变换,以保证摄像机的现场恒定。
    • 背面消隐:多边形都有两个侧面,一个侧面标记机为正面,另一个侧面标记为背面。通常,多边形的背面是不可见的。利用正面朝向多边形遮挡位于其后的背面朝向的多边形,将背面朝向多边形加以剔除。
    • 光照:光源定义在世界坐标系中,必须经过取经变换至观察坐标系方可使用。光源照亮了场景中的物体,从而可以获得较为逼真的显示效果。
    • 裁剪:将位于视域体外的几何体剔除掉。
    • 投影:获取3D场景的2D表示。定义了视域体,并负责将视域体中的几何体投影到投影窗口中。
    • 视口变换:将顶点坐标从投影窗口转换到屏幕的一个矩形区域中,该矩形区域成为视口。
    • 光栅化:计算构成三角形单元的每个像素的颜色值,以绘制每个三角形单元。其最终结果是显示在屏幕上一副2D图像。

原文链接:DX基础知识,转载请注明来源!

EOF