《《DirectX程序设计》复习资料-史广顺.doc》由会员分享,可在线阅读,更多相关《《DirectX程序设计》复习资料-史广顺.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流DirectX程序设计复习资料-史广顺DirectX程序设计教材信息名称DirectX游戏编程出版社清华大学出版社作者周国庆等版次2010年1月第1版一、客观部分:(单项选择、多项选择、不定项选择、判断)(一)、选择部分1、 1、()是图形中最基本的几何对象。A. 点B. 线C. 向量D. 三角形 考核知识点: 点和向量2、 ()可以用来判断向量叉乘值的方向。A. A左手定则 B右手定则B. C左手坐标系 D右手坐标系 考核知识点: 点和向量3、 三维物体变为二维图形的变换称为()。A. 平行投影B. 旋转变换C. 投影变换D. 缩放变换 考核知识点:
2、矩阵与坐标变换4、 ()是用于定义构成物体的三角形单元列表的坐标系。A. A世界坐标系 B本地坐标系B. C观察坐标系 D屏幕坐标系 考核知识点: 坐标系5、 5、()是HAL设备的变体,只支持硬件顶点处理。A. 纯软件模式B. 在不同设备上的混合顶点处理模式C. 在同一设备上的混合顶点处理模式D. 纯硬件模式 考核知识点: Direct3D底层结构概述6、 6、()是应用程序第一个创建而最后一个释放的对象。A. ADirect3D设备对象 BCOM组件对象B. CDirect3D对象 D类工厂对象 考核知识点: Direct3D底层结构概述7、 7、()是Win32编程的基础。A. 消息机制
3、B. 窗口过程C. 消息机制或窗口过程D. 消息机制和窗口过程 考核知识点: Win32+C+Direct3D的基础框架8、 以下哪个释放顺序是正确的(B)。A Direct3D对象、Direct3D设备对象B Direct3D设备对象、Direct3D对象C 顺序任意 D 无需释放 考核知识点: Win32+C+Direct3D的基础框架9、 Win32程序中利用()进行消息的捕获和处理.A. 循环函数B. 递归函数C. 回调函数D. 静态函数 考核知识点: Win32+C+Direct3D的基础框架10、 ()对象是用来指定字体属性的。A. ALPD3DXFONT BLPDIRECT3D9
4、B. CLPDIRECT3DDEVICE9 DRECT 考核知识点: Win32程序框架实现11、 DXUT框架将与文本渲染相关的属性和接口都封装在()类中。A. ID3DXFont B. ID3DXSprite C. DIRECT3DDEVICE9 D. CDXUTTextHelper 考核知识点: DXUT程序框架实现12、 3D世界中最基本的图形是()。A. 点 B. 线 C. 向量 D. 三角形 考核知识点:图元13、 ()是一个由相互连接的线段组合成的造型,程序可用它产生不封闭的多边形。A. 点列表 B. 线段列表 C. 线段条带 D. 三角形列表 考核知识点:图元14、 Direc
5、t3D中使用的是()。A. 左手坐标系 B. 右手坐标系 C. 两个都可以 D. 两个都不是 考核知识点:坐标系15、 灵活顶点格式是描述顶点的()属性。A. 顶点坐标 B. 顶点数据相关属性 C. 法线方向 D. 纹理坐标 考核知识点:灵活顶点格式(FVF)16、 ()缓存方式通常被放置在显存中,其中的数据能被有效地处理。A. 静态缓存 B. 动态缓存 C. 两种都可以 D. 两种都不可以 考核知识点:使用顶点缓存绘制图形17、 ()是最快的着色方式。A. 平面着色 B. 高洛德着色 C. 两种方式都很快 D. 两种方式都很慢 考核知识点:渲染状态18、 ()是将物体顶点坐标从模型自己的坐标
6、系空间转换到世界坐标系空间。A. 局部变换 B. 空间变换 C. 投影变换 D. 世界变换 考核知识点:顶点变换19、 ()变换后的的几何体位于观察坐标系中。A. 局部变换 B. 取景变换 C. 世界变换 D. 空间变换 考核知识点:顶点变换20、 ()是由光源发出经多次散射而无法确定其方向的光。A. 漫反射光 B. 环境反射光 C. 镜面发射光 D. 自发光 考核知识点:Direct3D中的光照21、 ()光垂直于物体时比倾斜时更明亮。A. 漫反射光 B. 环境反射光 C. 镜面发射光 D. 自发光 考核知识点:Direct3D中的光照22、 ()光源的发光区域是一个圆锥体。A. 点光源 B
7、. 方向光源 C. 聚焦光源 D. 混合光源 考核知识点:Direct3D中的光照23、 对于所有纹理上的每一个纹理像素,Direct3D需要有一个统一的地址范围,是在()之间A. 0.01.0 B. 0.02.0 C. 1.02.0 D. 0.03.0 考核知识点:纹理坐标24、 采用(A)时,复制与这个浮点值地址最接近的整数地址的纹理元素的颜色A. 最近点采样 B. 线性过滤 C. 各向异性过滤 D. mipmap过滤 考核知识点:纹理过滤25、 ()是Direct3D用来存储绘制到屏幕上的每个像素点深度信息的一块内存缓冲区A. 广度缓存 B. 深度缓存 C. 深度测试 D. 广度测试 考
8、核知识点:深度缓存与深度测试26、 如要绘制子集0中的所有三角形,代码如何() A. Mesh-DrawSubset() B. Mesh-DrawSubset(1) C. Mesh-DrawSubset(0) D. Mesh-DrawSubset 考核知识点:绘制27、 如果要对Mesh进行优化,需要知道Mesh的三角形的邻接信息情况,这些信息存储在()中A. 邻接矩阵 B. 邻接缓存 C. 深度缓存 D. 邻接数组 考核知识点:邻接信息28、 除了进行几何信息的排序外,还将创建一个 属性表,该表是()A. 数组 B. 缓存 C. 序列 D. 线性表 考核知识点:属性表29、 已经指定了定点数
9、和面数,同时也分配了适当大小的内存给顶点缓存、索引缓存以及属性缓存等,只是没有填入相应的数据称为()A. 一级Mesh B. 空Mesh C. 初试Mesh D. Mesh初始化 考核知识点:创建一个Mesh30、 在3DMAX等3D建模工具中创建好模型,模型转换为扩展名为.x的文件,称()A. .X文件 B. 3d文件 C. X文件 D. 3dMax文件 考核知识点:X文件格式解析31、 cube.x文件内容解释:“xof”标识这是()A. X文件 B. DirectX版本 C. 模板 D. 浮点数 考核知识点:X文件格式解析32、 模板限制中,表示()A. 开放的 B. 闭合的 C. 受限
10、的 D. 半开放的 考核知识点:X文件格式解析33、 ()可以动态地有针对地将某些像素写入后台缓存A. 深度缓存 B. 深度测试 C. Alpha测试 D. 模板缓存 考核知识点:模板34、 利用模板缓存来阻止对后台缓存村长哦功能某些特定区域进行绘制,判定是否将某个像素写入后台缓存的决策过程称为()A. 模板测试 B. 深度缓存 C. 深度测试 D. Alpha测试 考核知识点:模板35、 替换顶点处理的部分叫做()A. 像素着色器 B. 着色器 C. 顶点着色器 D. 可编程着色器 考核知识点:着色器入门36、 ()的功能是对进入管线的每一个像素点进行着色处理A. 像素着色器 B. 着色器
11、C. 顶点着色器 D. 可编程着色器 考核知识点:着色器概述37、 DirectX9中发布了高级着色器语言,是()A. GLSL B. HLSL C. Cg D. C+ 考核知识点:着色器概述38、 ()是一个在图形卡的GPU上执行的程序,可对顶点进行操作;包括顶点坐标转换和光照处理A. 像素着色器 B. 可编程着色器 C. 着色器 D. 顶点着色器 考核知识点:顶点着色器概述39、 ()对像素操作,运行于渲染管线的光栅化处理阶段,辅助实现诸如纹理混合、光照模型计算或环境映射等效果A. 像素着色器 B. 可编程着色器 C. 着色器 D. 顶点着色器 考核知识点:像素着色器概述40、 Direc
12、tX主要由()和()所构成。A. 硬件抽象层 B. 软件抽象层 C. 硬件模拟层 D. 软件模拟层 考核知识点:DirectX概述41、 HAL的顶点处理模式包括()。A. 软件顶点处理 B. 硬件顶点处理 C. 在不同设备上的混合顶点处理 D. 在同一设备上的混合顶点处理 考核知识点:Direct3D底层结构概述42、 可以存储RGB数据的结构包括()。A. DWORD B. D3DCOLOR C. D3DCOLORVALUE D. D3DXCOLOR 考核知识点:颜色表示法43、 Direct3D支持哪些多边形填充模式。A. 点模式 B. 线框模式 C. 实体模式 D. 混合模式 考核知识
13、点:渲染状态44、 哪些变换分别用于设定物体在世界坐标系中的位置、方向以及模型大小。A. 平移变换 B. 投影变换 C. 旋转变换 D. 缩放变换 考核知识点:顶点变换45、 投影变换包括哪几种投影方式。()A. 平面投影 B. 透视投影 C. 正射投影 D. 缩放投影 考核知识点:顶点变换46、 Direct3D中哪些光是分别独立地用于系统的光照计算的。()漫反射光 环境反射光 镜面发射光 自发光 考核知识点:Direct3D中的光照47、 常见的纹理寻址模式有()A. 重叠纹理寻址模式 B. 镜像纹理寻址模式 C. 钳位纹理寻址模式 D. 边界颜色纹理寻址模式 考核知识点:纹理寻址模式48
14、、 Direct3D提供了哪些()方法来简化纹理过滤的过程A. 最近点采样B. 线性过滤 C. 各向异性过滤 D. mipmap过滤 考核知识点:纹理过滤49、 模板定义包含哪些项()A. 模板名字 B. GUID C. 数据项 D. 用于控制模板的限制程度 考核知识点:X文件格式解析50、 渲染管线首先要设定哪些数据信息()A. 顶点B. 图元C. 纹理 D. 材质 考核知识点:着色器入门(二)、判断部分1、 直线与平面的夹角小于等于90。考核知识点:直线与平面2、 观察体的大小依赖于窗口的大小。考核知识点:矩阵与坐标变换3、 裁剪操作时,两个平面必须在投影参考点的不同侧。考核知识点:矩阵与
15、坐标变换4、 DirectX是Windows的一种多媒体API,但是不能保证设备无关性。考核知识点:DirectX概述5、 Direct3DHAL仅实现与设备相关的代码并且不做任何模拟。考核知识点:Direct3D底层结构概述6、 Direct3DAPI对象与GDI并排存在,且各自有操作硬件的硬件抽象层。考核知识点:Direct3D底层结构概述7、 Direct3D开发和部署的基本环境是DXUT的编程环境。考核知识点:Win32+C+Direct3D的基础框架8、 一个Direct3D对象可以创建多个Direct3D设备对象。考核知识点:Win32+C+Direct3D的基础框架9、 在Dir
16、ectX对窗口进行渲染之前,无需先对窗口进行渲染方面的配置。10、 考核知识点:Win32+C+Direct3D的基础框架11、 DXUT框架只支持Direct3D设备和窗口的一一对应。考核知识点:DXUT框架12、 绘制文本无需在渲染循环函数中执行。考核知识点:文本绘制流程13、 创建字体对象时应获得当前渲染区域的信息。考核知识点:Win32程序框架实现14、 创建的字体对象不是占用内存的资源对象,因此无需释放。考核知识点:Win32程序框架实现15、 图元是Direct3D中定义的基本图形表示,是组成一个单一实体的一组点和线的集合。考核知识点:图元16、 三角形条带的顶点顺序必须是按照顺时
17、针画的。考核知识点:图元17、 使用索引缓存时,必须将要绘制的模型的索引缓存与设备相关联且每次只能使用一个索引缓存。考核知识点:索引缓存18、 裁剪操作是在拍摄过程中的第四步按动快门拍摄时进行的。考核知识点:摄像机19、 光栅化过程是通过硬件和软件混合图形处理来完成的。考核知识点:光栅化20、 建模是指用一定的数学和物理方法建立所需3D场景的几何描述。考核知识点:真实感图形基本概念21、 在场景中,设置光源后即可,无需再对光源进行激活。考核知识点:Direct3D中的光照22、 物体表面的颜色不仅与照射光源的属性有关,还与物体的材质属性相关。考核知识点:Direct3D中的材质23、 对于图元
18、在二维屏幕上图像的每个像素来说,都必须从纹理中获得一个颜色值,这个过程称为纹理过滤考核知识点:纹理过滤24、 当三维物体表面与投影平面不平行时,它在屏幕上的投影会扭曲,这种现象称为mipmap过滤考核知识点:纹理过滤25、 纹理阶段混合状态用于指定当前纹理颜色值和Alpha值的混合方法考核知识点:纹理混合状态26、 通常情况下,深度缓存对应与屏幕大小相同的一块二维区域考核知识点:深度缓存与深度测试27、 设置深度缓存是指设置深度测试成功时对深度缓存如何操作考核知识点:深度缓存与深度测试28、 图形学中称由于采样频率不足而造成的失真为走样,反走样通过多重采样改善图形锯齿效果考核知识点:图形反走样
19、29、 渲染后的物体看起来像是由许许多多的三角形、四边形或五边形组成的,就像网一样,我们称为网状结构考核知识点:ID3DXMesh30、 若要从缓存中读取数据,需要锁定缓存,用完后解锁考核知识点:ID3DXMesh31、 三角形属性ID存储在Mesh的属性缓存中,由于每个三角形都对应一项属性缓存,所以属性缓存中的项目数等于Mesh中的三角形的个数考核知识点:子集和属性缓存32、 使用OptimizeInplace()进行网格优化后,Mesh的几何信息将按照属性进行排序,这样各个子集的顶点/索引将组成连续的块考核知识点:属性表33、 使用SetAttributeTable()方法来直接设置属性表
20、考核知识点:属性表34、 X文件是由模版驱动的,模版定义了如何存储一个数据对象考核知识点:X文件格式解析35、 模板限制指在存储数据对象时,是否可以增加其他数据类型的数据,在模板定义中结束部分的标识考核知识点:X文件格式解析36、 有材质和纹理的X文件中,还需定义材质模板、颜色模板、纹理文件名模板、纹理坐标模板等考核知识点:X文件格式解析37、 这种随着人们视线的远近而对模型绘制的多边形数目进行动态调整的技术被称为层次网格考核知识点:渐进网格38、 混合定义是将两个或两个以上的图像叠合在一起构成一幅新图像的方法考核知识点:混合因子39、 是用源像素颜色与目标像素颜色通过一种规则进行计算,计算的
21、结果为该像素的最终颜色,这个过程就是混合考核知识点:混合因子40、 Alpha分量主要是用来指定像素的透明等级考核知识点:混合计算41、 Alpha混合是渲染状态的一种,不启用Alpha混合也能进行相关计算考核知识点:混合计算42、 如果没有使用材质和问题,当前绘制像素的Alpha分量来自每个顶点颜色设置的Alpha值考核知识点:Alpha来源43、 平面着色模式,所有像素的Alpha值都大于等于该多边形的第一个顶点的Alpha值考核知识点:Alpha来源44、 像素的Alpha值就是纹理Alpha混合之后的值考核知识点:Alpha来源45、 Alpha测试并不把当前像素的颜色与颜色缓冲中像素
22、的颜色混合,像素要么完全不透明,要么完全透明考核知识点:Alpha测试46、 模板测试成功或者失败,模板中的值都会有相应的更新操作47、 考核知识点:模板48、 可编程管线允许用户自定义一段可以在GPU上执行的程序考核知识点:着色器入门49、 顶点和像素由GPU来执行,是固定功能管线的一部分考核知识点:着色器概述50、 顶点着色器与像素着色器不允许成对出现考核知识点:着色器概述51、 一个采样对象包含一个纹理对象以及对该纹理进行采样所需要的一些状态考核知识点:HLSL的变量52、 向量型的成员可以单独被访问,矩阵型不可以考核知识点:HLSL的变量(三)填空题1、用于定义构成物体的三角形单元列表
23、的坐标系叫做 本地坐标系(局部坐标系或模型坐标系) 。2、Direct3D的着色模式中, 平面着色模式 在绘制流水线使用多边形第一个顶点的材质颜色作为整个多边形的颜色来渲染该多边形;如果多边形不共面,被平面着色方式渲染的三维物体在多边形之间将具有可视的清晰边缘;3、 世界变换 是将物体顶点坐标从模型自己的坐标系空间转换到世界坐标系空间;4、Direct3D的着色模式中,高洛德着色模式 使用顶点法线和光照参数为每个顶点计算颜色,然后穿越多边形的表面进行插值,插值以线性方式完成;它会使物体的表面看上去弯曲而平滑;5、局部坐标系(local space)或 建模坐标系(modeling space)
24、 ,是用于定义构成物体的三角形单元列表的坐标系。6、创建的字体对象也是一种占用内存的资源对象,也要遵循“最先申请,最后释放”的准则适时释放它。7、DirectX中的3维坐标系遵循的是 左 手法则。8、两种基本的投影方式为 平行投影 和 透视投影 。9、DirectX主要由 硬件抽象层(HAL) 和 硬件模拟层(HEL) 所构成。10、Direct3D是通过(COM)组件对象模型对象和接口实现的,C+应用程序可以直接访问这些接口和对象。11、通常,图元是多边形(polygon),最简单的多边形是 三角形 。12、Direct3D定义了六种基本图元类型:点列表(D3DPT_POINTLIST),线
25、段列表(D3DPT_LINELIST),线段条带(D3DPT_LINESTRIP),三角形列表(D3DPT_TRIANGLELIST),三角形条带(D3D_TRIANGLESTRIP),三角形扇(D3DPT_TRIANGLEFAN)。13、Direct3D的填充模式中,会有点模式(D3DFILL_POINT),线框模式(D3DFILL_WIREFRAME),面模式(D3DFILL_SOLID)模式。14、 纹理 是指定区域像素颜色计算的过程;纹理过滤的4种类型分别是最近点采样、线性过滤、 各向异性过滤 、 mipmap过滤 。15、设P1(X1,Y1),P2(X2,Y2)为空间中的两个点,那么
26、距离P1P2= 。16、透视投影方式中,将投影平面置于观察点与投影对象之间,透视投影的投影线互不平行,会聚于一点,此点为观察点,也称投影中心。17、图元(primitive)是Direct3D中定义的基本图形表示,它是组成一个单一实体的一组顶点;最简单的图元是三维坐标系中多个点的集合,称为 点列表(point list)。18、三维物体变为二维图形的变换称为 投影变换 。19、视口变换(viewport transform)的任务是将顶点坐标从投影窗口转换到屏幕的一个矩 形区域中, 该矩形区域称为视口。20、Shader Model(着色器模型)是微软公司定义图形平台性能的一个标准,着色器是渲
27、染像素和顶点的小程序,分为顶点着色器(Vertex Shader)和像素着色器(Pixel Shader)。21、假设平面和的法线向量分别为和,则两平面的夹角为22、观察坐标系中是将 摄像机的坐标 作为原点,X轴向右,Z轴向前,Y轴向上。(四)程序题1、在绘制字体实例中,初始化Direct3D的函数如下,请将空白处补充完整: HRESULT InitializeD3D( HWND hWnd)/创建Direct3D对象,该对象用来创建Direct3D设备对象if (NULL = (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION ) )return false;/
28、设置D3DPRESENT_PARAMETERS结构,准备创建Direct3D设备对象D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp);d3dpp.Windowed = TRUE;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;/创建Direct3D设备对象if (FAILED(g_pD3D-CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_
29、SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)return FALSE; /创建字体对象if (FAILED(D3DXCreateFont(g_pd3dDevice,0,0,0,0,0,0,0,0,0,LArial,&g_pFont)return E_FAIL;/获取窗口客户区GetClientRect(hWnd,&clientRect);/设置剔除模式为不剔除任何面g_pd3dDevice-SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);/设置图元填充模式为线框模式g_pd3dDevice-SetRend
30、erState(D3DRS_FILLMODE,D3DFILL_WIREFRAME); return TRUE;2、一个绘制带有纹理贴的图立方体的例子,从里面截取绘制部分的片段,请将空白处补充完整:LPDIRECT3D9g_pD3D = NULL; /Direct3D对象LPDIRECT3DDEVICE9g_pd3dDevice = NULL; /Direct3D设备对象LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;/顶点缓存对象VOID Render()/清空后台缓存g_pd3dDevice-Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR
31、_XRGB(0,0,0),1.0f,0);/开始在后台缓存绘制图形if (SUCCEEDED(g_pd3dDevice-BeginScene()SetTexture();/设置纹理g_pd3dDevice-SetStreamSource(0,g_pVB,0,sizeof(CUSTOMVERTEX);g_pd3dDevice-SetFVF(D3DFVF_CUSTOMVERTEX);g_pd3dDevice-DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);/结束在后台缓存渲染图形g_pd3dDevice-EndScene();/将在后台缓存绘制的图形提交到前台缓存显示
32、g_pd3dDevice-Present( NULL,NULL,NULL,NULL );3、基于Win32框架的Direct3D程序的基本结构图如下,请补充完整:其中,程序主体的函数框架如下,请根据渲染函数流程将代码补充完整:INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT ) / Register the window class WNDCLASSEX wc = sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL
33、, NULL, NULL, NULL, LD3D Tutorial, NULL/注册窗口类 wc RegisterClassEx( &wc ); / Create the applications window HWND hWnd = CreateWindow( LD3D Tutorial, LD3D Tutorial 01: CreateDevice, WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, NULL, NULL, wc.hInstance, NULL ); / Initialize Direct3D if( SUCCEEDED( InitD3D(
34、hWnd ) ) ) / Show the window ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); / Enter the message loop MSG msg; while( GetMessage( &msg, NULL, 0, 0 ) )/Translate and dispatch Messages TranslateMessage( &msg ); DispatchMessage( &msg ); /UnRegister windowclass UnregisterClass( LD3D Tutorial,
35、wc.hInstance ); return 0;4、(每空3分,共12分)光源例子光源设置部分代码如下,请将空白处补充完整: /设置一号光源为漫反射方向光,颜色为白色 D3DXVECTOR3 vecDir1; D3DLIGHT9 light1; (1) ZeroMemory( &light1, sizeof(D3DLIGHT9) ); light1.Type = D3DLIGHT_DIRECTIONAL; light1.Diffuse.r = 1.0f; light1.Diffuse.g = 1.0f; light1.Diffuse.b = 1.0f; vecDir1 = D3DXVECTO
36、R3(-10, 0 , 10); /方向光方向 (2)D3DXVec3Normalize( (D3DXVECTOR3*)&light1.Direction, &vecDir1 ); g_pd3dDevice-SetLight( 0, &light1 );/二号光源为漫反射点光源,颜色为白色 D3DXVECTOR3 vecPos2; D3DLIGHT9 light2; (3) ZeroMemory( &light2, sizeof(D3DLIGHT9) ); light2.Type = D3DLIGHT_POINT; light2.Diffuse.r = 1.0f; light2.Diffuse.g = 1.0f; light2.Diffuse.b = 1.0f; light2.Position= D3DXVECTOR3( 10, 0, -10); light2.Range = 100.0f; light2.Attenuation0 = 1.0f; (4) g_pd3dDevice-SetLight( 1, &light2 );【精品文档】第 21 页课程名称