DirectX 3D基础复习

    xiaoxiao2024-12-21  3

    DirectX 3D基础复习

    主要是用于期末考试复习

    D3D期末复习(书本)

    第一部分:基础知识

    1、在D3DX库中,我们用类D3DXVECTOR3表示3D空间中的向量 2、向量的计算: (1)点积: ①u.v=0两个向量垂直 ②u.v>0两个向量之间的夹角小于90度 ③u.v<0两个向量之间的夹角大于90度 (2)叉积:p=UxV=[(UyVz-UzVy),(UzVx-UxVz),(UyVx-UxVy)] 3、D3DXMATRIX类型矩阵提供: (1)求单位矩阵的函数:D3DXMatrixIdentity() (2)求转置矩阵函数:D3DXMatrixTranspose() (3)求逆矩阵函数:D3DXMatrixInverse() (4)创建平移矩阵的函数:D3DXMatrixTranslation() (5)创建旋转矩阵的函数:D3DXMatrixRotation() (6)创建比例变换矩阵的函数:D3DXMatrixScaling() (7)对点进行变换:D3DXVec3TransformCoord() (8)对想向量进行变换:D3DXVec3TransformNormal()

    第二部分:Direct3D基础

    一、初始化D3D

    1.D3D和图形设备之间有一个中间环节-----HAL(硬件抽象层) 2.参考光栅设备(以软件运算方式完全支持Direct3D API)——REF 3.COM(组件对象模型)是一项能使DirectX独立与编程语言并具有向下兼容的技术。常称COM为对象接口,可将其视为一个C++类来使用。使用完接口应调用相应的Release方法 4.表面——是Direct3D主要用于存储2D图像数据的一个像素矩阵 5.多重采样——平滑块状图像的技术。对表面进行多重采样常用语全屏反走样 6.交换连和页面置换技术主要用于生成更平滑的动画。 7.深度缓存(z-缓存),Direct3D为了判断某一物体的哪些像素位于另一个物体之前。深度缓存的格式决定了深度测试的精度。 8.顶点运算: (1)软件顶点运算 (2)硬件顶点运算(优先考虑) 9.初始化Direct3D (1)获取接口IDirect3D9的指针 (2)检查设备性能(D3DCAPS9),判断显卡是否支持硬件顶点运算。 (3)初始化D3DPRESENT_PARAMETERS结构的一个实例 (4)利用已初始化的D3DPRESENT_PARAMETERS结构创建IDirect3DDevice9对象 10.IDirect3D9对象的两个用途: (1)设备枚举 (2)创建IDirect3DDevice9类型的对象 11.立例程框架:主要考虑3个主要函数 (1)bool Setup():例程所需进行的全部设置和初始化都在该函数中进行。如分配资源、检查设备性能、设置应用程序的状态 (2)void Cleanup():用于释放在Setup函数中分配的任何资源,例如分配的存储单元。 (3)bool Didplay(float timeDelta(相邻帧之间的时间差,主要用于动画显示器的刷新频率保持同步))在该函数中实现全部的绘制代码以及相邻帧之间应执行的操作。

    二、绘制流水线:

    1.绘制流水线的功能:在给定的3D场景和制定观察方向的虚拟摄像机的几何描述时,创建一副2D图像。 2.三角形网格是构建物体模型的基本单元。 3.用于描述网格中的三角形元素的术语:多边形、图元、网格几何元 4.一个多边形中相邻两条边的交汇点称为顶点 5.在Direct3D中,顶点除了包含空间信息以外,还可以包含颜色属性、法线属性等附加属性(4、5章) 6.顶点格式描述:定义灵活顶点格式 (1)包含位置和漫反射属性:#define FVF_COLOR(D3DFVF_XYZ|D3DFVF_DIFFUSE) (2)包含位置、法线、及纹理坐标等属性: ①#define FVF_COLOR(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1) 7.三角形单元是3D物体的基本组成部分。为了创建一个物体,需要创建一个描述物体形状和轮廓的三角形单元列表(三角形单元列表包含了我们所希望绘制的每个独立三角形的数据)。 8.索引: (1)顶点列表:包含全部的独立顶点 (2)包含指向顶点列表的索引 9.摄像机的可视空间体积是一个平截头体(3D图形学中:视域体或视截体) 10.绘制流水线:在显示器中建立该场景的2D表示,为实现这一目标所必须实施的一系列运算: (1)局部坐标系–》世界坐标系–》观察坐标系–》背面消隐–》光照–》剪裁–》投影–》视口坐标系–》光栅化 11.局部坐标系(建模坐标系):是用于定义构成物体的三角形单元列表的坐标系 12.世界坐标系:位于局部坐标系中的物体通过一个称为世界变换的运算变换到世界坐标系中(该变换包括:平移、旋转、比例运算)、 13.观察坐标系:通过取景变换后的几何体位于观察坐标系中 14.背面消隐:将背面朝向多变形加以剔除。Direct3D认为顶点排序为顺时针的三角形单元是正面朝向 15.光源必须经取景变换至观察坐标系后才能使用。在观察坐标系中,光源照亮了场景中的物体,从而可以获得较为逼真的显示效果。 16.剪裁:将那些位于视域体外的几何体剔除掉。 17.投影:获取3D场景的2D表示。从n维变换为n-1维的过程称为投影 (1)透视投影:近大远小 (2)D3DXMatrixPerspectiveFovLH (3)纵横比:显示屏纵横两维尺寸的比率 18.视口变换:将顶点坐标从投影窗口转换到屏幕的一个矩形区域(视口)中 19.光栅化:为了绘制每个三角形单元,如何计算构成三角形单元的每个像素的颜色值。最终结果是显示在屏幕上的一副2D图像。

    三、Direct3D中的绘制

    1.顶点缓存:是一个包含顶点数据的连续内存空间 2.索引缓存:是一个包含索引数据的连续内存空间 3.顶点缓存和索引缓存可以被放在显卡中,绘制速度更快 4.绘制前的三个步骤: (1)指定数据流输入源 (2)设置顶点格式 (3)设置索引格式 5.绘制方法所在位置 (1)_device->BeginScene(); (2)_device->DrawPrimitive(); (3)_device->EndScene();

    四、颜色:

    1.每种颜色分量均占用一个字节,所以每个分量的亮度值范围都在[0,255]区间内。接近0的值表示低亮度,接近255的值表示高亮度 2.RGB数据保存:D3DCOLOR_XRGB 可以代替D3DCOLOR_ARGB, D3DCOLOR_XRGB不接受Alpha参数,将Alpha分量设置为(0xff,r,g,b) 3.存储颜色数据:D3DCOLORVALUE。 4.光栅过程的着色:着色模式:平面(flat shading)着色、Gouraud着色(平滑着色) (1)平面着色:每个图元的每个像素都被一致的赋予改图元的第一个顶点所指定的颜色 (2)平滑着色:图元中各像素的颜色值由各顶点的颜色经线性插值得到。(绘制三角形p95)

    五、光照

    1.为了增强所绘场景的真实感,可为场景增加光照。也有助于描述实体形状和立体感。 2.光源发出的光有3种类型或者说3个分量组成 (1)环境光(Ambient Light):物体被照亮是由于其他物体对光的反射 (2)漫射光(Diffuse Light):沿着特定的方向传播 (3)镜面光(Specular Light):沿特定的方向传播 3.Emission 该分量用于增强物体的亮度 使之看起来好像可以自己发光 4.power 指定镜面高光点的锐度,该值越大,高光点的锐度越大 5.面法线:描述多边形朝向的向量 6.顶点法线:描述的是构成多边形各个顶点的法线 7.3种类型的光源: (1)点光源(Point lights):在世界坐标系有固定的位置 (2)方向光(Direction lights):该光源没有固定的位置 (3)聚光灯(conical shape):有位置信息

    六、纹理映射

    1.借助纹理映射技术,我们可以将图像数据映射到三角形单元中。接口用IDirect3DTexture9 2.纹理坐标沿水平方向的u轴和沿垂直方向的v轴构成。或用坐标对(u,v)产生的纹理元素称为纹理元。左上角(0,0) 3.在Direct3D中,最多可设置8层纹理 4.纹理过滤技术: (1)最近采样(默认过滤方式):处理速度快,但效果最差(_POINT) (2)线性纹理过滤:结果相当好,速度比较快。(_LINEAR) (3)各项异性纹理过滤:产很最好的结果,但是处理速度最慢(_ANISOTROPIC) (4)多级渐进过滤(Filter) 5.寻址模式: (1)重复寻址模式(swap) (2)边界颜色寻址模式(border color) (3)箝位寻址模式(clamp) (4)镜像寻址模式(mirror) 6.为场景添加纹理映射的步骤: (1)构造组成物体的顶点,并为其制定纹理坐标 (2)用函数D3DXCreateTextureFromFile为IDirect3DTexture9接口加载一种纹理 (3)设置缩小过滤器、放大过滤器和多级纹理过滤器 (4)绘制物体前,用函数IDirect3DDevice9::Texture来设定与该物体相关联的纹理

    七、融合技术

    1.融合技术:能使我们将当前要进行光栅化的像素的颜色与先前已经光栅化并处于同一位置的像素颜色进行合成。及将赈灾处理的图元颜色值与存储在后台缓冲的像素颜色值进行合成。 2.融合运算时,必须遵循的规则: (1)首先绘制那些不需要进行融合的物体。然后将需要进行融合的物体按照相对于摄像机的深度值进行排序。 3.进行融合运算时,需要将绘制状态:D3DRS_ALPHABLENDENABLE设置为true,便启用了融合运算。 4.透明度:每个顶点颜色中的Alpha分量与颜色值类似,都是沿着三角形单元表面渐变的,用于确定像素的Alpha分量。 5.Alpha分量主要用于指定像素的透明度。 6.为了能用Alpha分量来描述像素的透明度,我们必须将源融合因子和目标融合因子分别设置为D3DBLEND_SRCALPHA和D3DBLEND_INVSRCALPHA 7.DDS文件具有Alpha通道的文件:DDS文件是一种专为DirectX应用程序和纹理设计的图像格式。——使用函数:D3DXCreateTextureFromFile

    八、模板

    1.模板缓存是一个用于获得某种特效的离屏缓存。 2.模板缓存的分辨率与后台缓存、深度缓存的分辨率完全相同,所以模板缓存中的像素与后台缓存中的像素是一一对应的。 3.启用模板缓存:D3DRS_STENCILENABLE,true 4.模板缓存可与深度缓存一同创建,因为两者共享同一个表面存储区 5.可用模板缓存来组织对后台缓存中某些特定区域进行绘制。判定是否将某个像素写入后台缓存的决策过程叫做模板测试。 (1)左操作数:ref与mask通过按位与运算得到的 (2)右操作数:value和mask通过按位与运算得 6.创建相对于任意平面的镜像变换矩阵D3DXMatrixReflect

    九、字体

    1. ID3DXFont,该接口内部使用GDI绘制文本 2.ID3DFont,使用了纹理映射的三角形单元以及Direct3D,所以速度比ID3DXFont快很多 3.D3DXCreateText函数可以用来创建文本字符串的3D网格 4.绘制3D文本网格:DrawSubset

    十、网格(一)

    1.ID3DXMesh接口仅支持将索引化的三角形单元列表作为其基本类型 2.一个网格由一个或多个自己组成,一个子集是网格中一组可用相同属性(材质、纹理、挥绘制状态)进行绘制的三角形基本单元。 3.网格优化:Optimizing

    十一、网格(二)

    1.D3DXLoadMeshFromX函数用ID3DXBuffer(是一个COM对象,该接口使用完毕后必须释放)类型的指针返回一个网格对象的邻接信息 2.D3DXPMesh接口表示的渐进网格可用来控制网格的细节层次

    十二、设计一个灵活的Camera类

    1.用D3DXMatrixLookAtLH函数计算出观察矩阵 2.在Camera类中用getViewMatrix方法来计算观察矩阵 3.实现摄像机能绕任意轴进行旋转:D3DXMatrixRotationAxis

    十三、地形绘制基础

    1.地形网格其实就是一系列三角形栅格 2.地形中某一点的海拔越高,相应地该点在灰度图中的亮度越大 3.高度图是包含了地形中顶点的高度值的数据集

    十四、粒子系统

    1.特别的点图元——点精灵:可进行纹理映射且尺寸不变 2.粒子系统维护了一个粒子集,并负责粒子的创建、销毁、更新和显示

    十五、拾取

    1.拾取是一项根据用户在屏幕上的点击位置(3D物体在屏幕上的投影)来确定用户是否选中了哪个3D物体的技术 2.如果一条射线的起点与观察坐标系的原点重合,且经过用户所单击的屏幕点,则该谁先及对应一条拾取射线 3.要判断射线余某物体是否相交,可测试射线是否与构成某物体的某一面片相交或射线是否与该物体的外接体相交

    是根据书上的知识总结的,如果有错误欢迎指正

    最新回复(0)