DirectX程序设计.docx
《DirectX程序设计.docx》由会员分享,可在线阅读,更多相关《DirectX程序设计.docx(28页珍藏版)》请在冰豆网上搜索。
DirectX程序设计
《DirectX程序设计》课程期末复习资料
第一章3D游戏开发的数学基础
本章包含的全部知识点:
●点和向量
●直线与平面
●矩阵与坐标变换
●坐标系
章节重点:
矩阵和坐标变换
第二章Windows编程基础
本章包含的全部知识点:
●基本概念介绍
●Windows程序结构
●Win32程序开发实例
第3章DirectX快速入门
本章包含的全部知识点:
●DirectX概述
●Direct3D底层结构概述
●DirectX9.0的配置和安装
章节重点:
DirectX9.0的配置和安装
第4章DirectX程序框架
本章包含的全部知识点:
●Win32+C+Direct3D的基础框架
●DXUT框架
章节重点:
Win32+C+Direct3D的基础框架
第5章文本显示
本章包含的全部知识点:
●文本绘制流程
●Win32程序框架实现
●DXUT程序框架实现
章节重点:
Win32程序框架实现
第六章基本图形的绘制
本章包含的全部知识点:
●图元
●灵活顶点格式(FVF)
●使用顶点缓存绘制图形
●索引缓存
●颜色表示法
●渲染状态
●绘制准备
●D3DX几何物体
●实例设计与实现
章节重点:
顶点缓存
索引缓存
第七章变换
本章包含的全部知识点:
●摄像机
●顶点变换
●光栅化
●实例
章节重点:
顶点变换
第八章3D数学基础补充
本章包含的全部知识点:
●常见坐标系
●向量
●矩阵
●线性变换
章节重点:
●线性变换
第九章光照和材质
本章包含的全部知识点:
●真实感图形基本概念
●Direct3D中的光照
●Direct3D中的材质
●光照和材质例子
章节重点:
Direct3D中的光照
Direct3D中的材质
第十章纹理映射
本章包含的全部知识点:
●纹理贴图
●纹理坐标
●纹理寻址模式
●纹理过滤
●纹理混合状态
●纹理实例解析
章节重点:
纹理寻址模式
纹理过滤
第十一章深度测试和反走样
本章包含的全部知识点:
●深度缓存与深度测试
●图形反走样
●深度测试实例
章节重点:
深度缓存与深度测试
第十二章网格
(一)
本章包含的全部知识点:
●ID3DXMesh
●子集和属性缓存
●绘制
●邻接信息
●优化
●属性表
●创建一个Mesh
●例子
章节重点:
子集和属性缓存
创建一个Mesh
第十三章网格
(二)
本章包含的全部知识点:
●X文件格式解析
●读取X文件
●渐进网格
●渐进网格例子
章节重点:
深度缓存与深度测试
第十四章混合和模板
本章包含的全部知识点:
●混合因子
●混合计算
●Alpha来源
●Alpha混合实例
●模板
章节重点:
Alpha混合实例
第十五章着色器入门
本章包含的全部知识点:
●着色器概述
●HLSL的变量
●HLSL的函数
●HLSL基本语法
●在Direct3D中使用HLSL
章节重点:
Alpha混合实例
第十六章顶点着色器
本章包含的全部知识点:
●顶点着色器概述
●顶点声明
●使用顶点着色器
●顶点着色器实例
第十七章像素着色器
本章包含的全部知识点:
●像素着色器概述
●使用像素着色器
●HLSL采样器对象
●多重纹理
●例子程序
一、客观部分:
(单项选择、多项选择、不定项选择、判断)
(一)、选择部分
1.D3DPRESENT_PARAMETERS参数很多,关于其中参数之一windowed的理解正确的是(ABD)
A.取值FALSE则渲染全屏B.取值TRUE则渲染窗口C.int类型D.BOOL类型E.double类型
★考核知识点:
D3DPRESENT_PARAMETERS
2.以下属于Direct3D定义的图元类型的有(ABCD)
A.点列表B.线段条带C.三角形列表D.三角形条带E.四边形列表
★考核知识点:
图元
3.以下属于Direct3D提供的着色模式的是(AB)
A.平面着色模式B.高洛德法着色模式C.渐变着色模式D.单颜色着色模式
★考核知识点:
着色模式
4.下面属于Direct3D提供的创建旋转矩阵的函数的是(ABC)
A.D3DXMatrixRotarionXB.D3DXMatrixRotarionYC.D3DXMatrixRotarionZ
D.D3DXMatrixRotXE.D3DXMatrixRotY
★考核知识点:
变换
5.以下属于Direct3D提供的简化纹理过滤的过程的是(ABCD)
A.最近点采样B.线性过滤C.各向异性过滤D.mipmap过滤
★考核知识点:
纹理过滤
6.D3DPRESENT_PARAMETERS参数很多,下面理解正确的是(ABCD)
A.Windowed取值FALSE则渲染全屏B.BackBufferCount表示后备缓冲的数目
C.SwapEffect表示交换缓冲类型D.BackBufferFormat表示后备缓冲的格式
★考核知识点:
D3DPRESENT_PARAMETERS
7.以下属于Direct3D中提供的标准光源的是(ABC)
A.点光源B.方向光源C.聚焦光源D.多点光源
★考核知识点:
光源
8.关于灵活顶点格式下列说法正确的是(ABD)
A.D3DFVF_DIFFUSE表示顶点数据中包含的是漫反射颜色值;
B.D3DFVF_SPECULAR表示顶点数据中包含的是镜面反射下的颜色值
C.D3DFVF_XYZRHW表示顶点数据中包含的是未经过坐标变换的顶点坐标
D.D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标
考核知识点:
灵活顶点格式
解析:
C项应该是经过坐标变换后的顶点坐标
9.关于顶点Alpha描述正确的是(AB)
A.如果在程序中直接指定每个顶点的颜色,直接给出每个顶点颜色的Alpha值。
B.渲染对象中每个像素的Alpha值由该对象的Alpha值和着色模式决定。
C.高洛德着色模式,所有像素的Alpha值都等于该多边形的第一个顶点的Alpha值。
D.平面着色模式,每个多边形上的像素的Alpha值由它的各个顶点的Alpha值进行线性插值得到。
考核知识点:
顶点Alpha
解析:
C项应该是平面着色模式,所有像素的Alpha值都等于该多边形的第一个顶点的Alpha值。
D项应该是高洛德着色模式,每个多边形上的像素的Alpha值由它的各个顶点的Alpha值进行线性插值得到。
(二)、判断部分
1.Direct3D将给每个采样器对象连接一个唯一的纹理阶段(stage),在应用程序中找出与采样器对象相关联的阶段,并设置相应的纹理和采样器状态给该阶段。
(正确)
★考核知识点:
纹理
2.一个Direct3D对象只能创建一个Direct3D设备对象。
(错误)
★考核知识点:
Direct3D设备对象
考核知识点解释
一个Direct3D对象可以创建多个Direct3D设备对象。
3.由于Direct3D设备对象是由Direct3D对象创建的,因此应先释放Direct3D设备对象。
(正确)
★考核知识点:
Direct3D对象及设备对象
4.D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标,不能与D3DFVF_XYZRHW同时使用。
(正确)
★考核知识点:
灵活顶点格式
5.D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标,可以与D3DFVF_XYZRHW同时使用。
(错误)
★考核知识点:
灵活顶点格式
考核知识点解释
D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标,不可以与D3DFVF_XYZRHW同时使用。
6.D3DFVF_XYZRHW顶点数据中包含经过坐标变换的顶点坐标,不能与D3DFVF_XYZ和D3DFVF_NORMAL同时使用。
(正确)
★考核知识点:
灵活顶点格式
7.Direct3D创建的场景和对象都是由简单的“图元”按照一定的方式排列组合而成的,Direct3D中的所有图元都是一维或二维对象,包括单个的点和直线及复杂的多边形。
(正确)
★考核知识点:
图元
8.在索引缓存中定位顶点也就是在顶点缓存中定位顶点。
(正确)
★考核知识点:
顶点缓存索引缓存
二、主观部分:
(一)、填空部分
1)像素着色器的输入仅有颜色和纹理坐标两种语义。
考核知识点:
像素着色器
2)像素着色器的工作是在顶点着色器之后,后者的输出将为前者提供输入。
考核知识点:
像素着色器
3)D3DFVF_DIFFUSE表示顶点数据中包含的是漫反射颜色值;
考核知识点:
灵活顶点格式
4)D3DFVF_SPECULAR表示顶点数据中包含的是镜面反射下的颜色值;
考核知识点:
灵活顶点格式
5)D3DFVF_XYZRHW表示顶点数据中包含的是经过坐标变换的顶点坐标
考核知识点:
灵活顶点格式
6)Direct3DCreate9函数创建一个Direct3D对象并获得指向Direct3D对象接口的指针,且参数必须设置为D3D_SDK_VERSION。
考核知识点:
Direct3D对象
7)DXUT(TheDirectXUtilityLibrary)是建立在Direct3D9和Direct3D10上的一个程序框架,其目标是建立一个强大而容易使用的Direct3D游戏开发框架,它简化了Win32和Direct3DAPI的使用。
考核知识点:
DXUT
8)创建DirectX设备对象的函数为CreateDevice。
考核知识点:
设备对象
9)Direct3D图形程序通过调用IDirect3DDevice9:
:
SetRenderState()函数来设置渲染状态。
考核知识点:
设置渲染状态
10)g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT),这行代码完成的功能是(设置着色模式为平面着色模式)。
考核知识点:
设置着色模式
11)g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD),这行代码完成的功能是(设置着色模式为高洛德着色模式)。
考核知识点:
设置着色模式
(二)、名词解释
1、请你给出创建顶点声明,并获得IDirect3DVertexDeclaration9接口指针的方法。
考核知识点:
顶点声明
考核知识点解释
HRESULTIDirect3DDevice9:
:
CreateVertexDeclaration(
CONSTD3DVERTEXELEMENT9*pVertexElements,//要创建的顶点声明
IDirect3DVertexDeclaration9**ppDecl//返回创建的IDirect3DVertexDeclaration9接//口指针);
2、请你给出环境光(ambientlight)的概念,并说明如何设置渲染状态为整个场景添加环境光。
考核知识点:
环境光
考核知识点解释
环境光(ambientlight)
由光源发出经环境多次散射而无法确定其方向的光,即好像是来自四面八方的光;室内成分大,室外成分少,没有位置或方向上的特征,只有颜色亮度值,不会衰减;
通过设置渲染状态为整个场景添加环境光:
g_device->SetRenderState(D3DRS_AMBIENT,D3DCOLOR_X#);
3、请你给出镜面反射光的概念,并说明如何设置渲染状态。
考核知识点:
镜面反射光
考核知识点解释
镜面光来自特定方向并被反射到特定方向;在默认状态下,Direct3D不对物体进行镜面反射计算,需设置相关的渲染状态:
g_device->SetRenderState(D3DRS_SPECULARENABLE,TRUE);
如果需要进行漫反射或镜面反射运算,那么在顶点缓冲器中必须包含顶点的法向量信息;
4、请给出设置像素着色器的函数原型及调用示例代码。
考核知识点:
像素着色器
考核知识点解释
HRESULTIDirect3DDevice9:
:
SetPixelShader(
IDirect3DPixelShader9*pShader);
这个方法只接受一个参数,通过它传递一个我们要使用的指向像素着色器的指针。
示例代码如下:
Device->SetPixelShader(MultiTexPS);
5、销毁像素着色器接口函数原型
考核知识点:
像素着色器
考核知识点解释
d3d:
:
Release(MultiTexPS);
6、在Direct3D的一个场景中,最多可设置几个光源,设置函数形式。
考核知识点:
光源
考核知识点解释
最多可设置8个光源
HRESULTSetLight(DWORDIndex,CONSTD3DLight9*pLight);
7、光照程序一般步骤。
考核知识点:
光照
考核知识点解释
(1)创建光源、设置其位置及相关属性;SetLight函数将光源设置到渲染管道流水线中;LightEnable函数激活光源;
(2)SetRenderState打开渲染管道流水线的光照开关;
(3)创建材质,设置物体的材质属性,SetMaterial设定材质;
8、请给出点列表图元的含义,并说明其应用。
考核知识点:
图元
考核知识点解释
点列表是一个对每点独立进行渲染的顶点集合。
程序可以在3D场景中使用它模拟星空视野,或作为多边形表面的点化线。
9、请给出线段列表图元的含义,并说明其应用。
考核知识点:
图元
考核知识点解释
线段列表是一系列的独立线段,用于为3D场景加入冰雹或大雨等效果,线段列表中顶点的数量必须是大于等于2的偶数。
10、请给出线段条带图元的含义,并说明其应用。
考核知识点:
图元
考核知识点解释
线段条带是一个由相互链接的线段组合成的造型,程序可以用它产生不封闭的多边形;
11、请给出三角形列表图元的含义,并说明其应用。
考核知识点:
图元
考核知识点解释
三角形列表是一系列独立的三角形,它们之间可能靠的很近,也可能不是,顶点总数必须能被3整除;使用三角形列表建立一个由离散面片组成的物体;如建立力场墙的一种方法是指定一个由互相不相连的小三角形组成的大型列表;然后将一个可以发散光线的材质和纹理应用到这个三角形列表上
12、请给出三角形条带图元的含义,并说明其应用。
考核知识点:
图元
考核知识点解释
三角形条带是一连串相邻接的三角形。
3D场景中大部分物体都是由三角条带组成的。
13、请给出三角形扇图元的含义,并说明其应用。
考核知识点:
图元
考核知识点解释
三角形扇和三角形条带类似,但其所有三角形共享一个顶点。
3D场景中曲面的描述。
14、请给出Direct3D中设置渲染状态的函数原型,并解释其参数含义。
考核知识点:
渲染状态
考核知识点解释
Direct3D图形程序通过调用IDirect3DDevice9:
:
SetRenderState()函数来设置渲染状态。
枚举类型D3DRENDERSTATETYPE列举出所有可能的渲染状态;使用SetRenderState()设置:
HRESULTIDirect3DDevice9:
:
SetRenderState(
D3DRENDERSTATETYPEState,//更改的渲染状态
DWORDValue);//新的状态值
15、请你解释平面着色模式的含义。
考核知识点:
着色模式
考核知识点解释
Direct3D绘制流水线使用多边形第一个顶点的材质颜色作为整个多边形的颜色来渲染该多边形;如果多边形不共面,被平面着色方式渲染的三维物体在多边形之间将具有可视的清晰边缘;平面着色是最快的着色方式。
16、请你解释高洛德着模式的含义。
考核知识点:
着色模式
考核知识点解释
它使用顶点法线和光照参数为每个顶点计算颜色,然后穿越多边形的表面进行插值,插值以线性方式完成,高洛德着色使物体的表面看上去弯曲而平滑。
17、可编程管线渲染一个球体的步骤。
考核知识点:
着色模式
考核知识点解释
1)找到用于渲染该球体的VertexShader和PixelShader;
2)将参数传递给VertexShader,VertexShader的输出再传递给PixelShader;
3)绘制该球体;
18、请说明怎样对多级渐进纹理过滤器进行设置,并具体解释Filter的取值。
考核知识点:
多级渐进纹理过滤
考核知识点解释
Device->SetSamplerState(0,D3DSAMP_MIPFILTER,Filter);
D3DTEXF_NONE:
禁用多级渐进纹理过滤;
D3DTEXF_POINT:
就会只使用与图元大小最匹配的一级纹理;
D3DTEXF_LINEAR:
Direct3D就将与图元大小最匹配的两级纹理以线性方式混合。
19、请你给出物体表面材质的定义方式,并解释每个参数的概念。
考核知识点:
材质
考核知识点解释
typedefstrcutD3DMATERIAL9{
D3DCOLORVALUEDiffuse;//慢射光的反射属性
D3DCOLORVALUEAmbient;//环境光的反射属性
D3DCOLORVALUESpecular;//镜面光的反射属性
D3DCOLORVALUEEmissive;//自发光的反射属性
floatPower;//镜面光的高光强度
}D3DMATERIAL9,*LPD3DMATERIAL9;
(三)、简答
1、着色器代码编译后,获得一个IDirect3DVertexShader9接口的指针,它代表一个顶点着色器,具体方法,及其调用过程。
考核知识点:
着色器
考核知识点解释
HRESULTIDirect3DDevice9:
:
CreateVertexShader(
constDWORD*pFunction,
IDirect3DVertexShader9**ppShader);
其中,输入参数pFunction指向编译成功的着色器代码段,输出参数ppShader指向最终生成的顶点着色器。
假设变量shader是一个包含已编译的着色器代码的ID3DXBuffer指针,如果要获得一个IDirect3DVertexShader9接口,可以这样写:
IDirect3DVertexShader9*NewShader=0;
hr=Device->CreateVertexShader((DWORD*)shader->GetBufferPointer(),&NewShader);
2、如何测定像素着色器的支持。
考核知识点:
像素着色器
考核知识点解释
可用对SetDeviceCaps的调用来测定像素着色器的支持。
Caps结构包括一个叫做PixelShaderVersion的DWORD成员,其值对主版本号和子版本号进行编码,解释这个值的含义的最佳方法是用D3DPS_VERSION宏:
D3DCAPS8Caps;
M_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&Caps);
If(Caps.PixelShaderVersion==D3DPS_VERSION(1,1))
{
If(Failed(EasyCreateWindowed(m_hWnd,D3DDEVTYPE_HAL,D3DCREATE_HARDWARE_VERTEXPROCESSING)))
ReturnFALSE;
}
3、请给出D3DPRESENT_PARAMETERS的定义,并解释BackBufferFormat,SwapEffect,Windowed三个参数的含义。
考核知识点:
D3DPRESENT_PARAMETERS
考核知识点解释
typedefstruct_D3DPRESENT_PARAMETERS_
{
UINTBackBufferWidth;//全屏幕式后备缓冲的宽度
UINTBackBufferHeight;//全屏幕式后备缓冲的高度
D3DFORMATBackBufferFormat;//后备缓冲的格式
UINTBackBufferCount;//后备缓冲的数目
D3DMULTISAMPLE_TYPEMultiSampleType;//全屏抗锯齿类型
DWORDMultiSampleQuality;//全屏抗锯齿质量等级
D3DSWAPEFFECTSwapEffect;//交换缓冲类型
HWNDhDeviceWindow;
BOOLWindowed;//全屏或窗口
BOOLEnableAutoDepthStencil;//激活深度缓冲
D3DFORMATAutoDepthStencilFormat;//深度缓冲格式
DWORDFlags;
UINTFullScreen_RefreshRateInHz;//显示器刷新率
UINTPresentationInterval;//图像最大刷新速度
}D3DPRESENT_PARAMETERS;
•BackBufferFormat——后备缓冲的格式,DX9只支持16位和32位的后备缓冲格式,如D3DFMT_R5G6B5表示后备缓冲的格式为每个像素16位,红色5位、绿色6位、蓝色5位,也可设置为D3DFMT_UNKNOWN,这时使用桌面的格式。
•SwapEffect——交换缓冲支持的效果类型,它是D3DSWAPEFFECT枚举类型,此处设定为D3DSWAPEFFECT_DISCARD,即后备缓存的内容被复制到屏幕上后,后备缓存的内容失效,可以丢弃。
•Windowed——如果为FALSE,表示渲染全屏,若为TRUE,则渲染窗口。
4、基于win32基本框架,绘制文本的函数原型及调用。
考核知识点:
绘制文本
考核知识点解释
在Render函数中通过DrawText函数控制文本显示,该函数是LPD3DXFONT类的成员函数,其函数原型如下:
INTDrawText(LPD3DXSPRITEpSprite,LPctstrpString,INTCount,LPRECTpRect,DWORDFormat,D3DCOLORColor);
此处的调用为:
g_pFont->DrawText(NULL,strText,-1,&clientRect,DT_SINGLELINE|DT_NOCLIP|DT_CENTER|DT_VCENTER,0xffffffff);
5、顶点缓存中的顶点可