资源描述
《DirectX程序设计》课程期末复习资料一、客观部分:(单项选择、多项选择、不定项选择、判断)
(一)、选择部分1. D3DPRESENT_PARAMETERS参数很多,关于其中参数之一 windowed的理解正确 的是( ABD )A.取值FALSE则渲染全屏
A.取值FALSE则渲染全屏
A.取值FALSE则渲染全屏
A.取值FALSE则渲染全屏
A.取值FALSE则渲染全屏
B.取值TRUE则渲染窗口
C. int 类
D. BOOL类型
E. double 类型
2,以下属于Direct 3D定义的图元类型的有(ABCDA.点列表
A.点列表
A.点列表
A.点列表
A.点列表
A.点列表
B.线段条带
C.三角形列表
D.三角形条带
E.四边形列表3.以下属于Direct 3D提供的着色模式的是( ABA.平面着色模式
A.平面着色模式
A.平面着色模式
A.平面着色模式
A.平面着色模式
B.高洛德法着色模式
C.渐变着色模式
D.单颜色着色模式
D.单颜色着色模式
D.单颜色着色模式
D.单颜色着色模式
D.单颜色着色模式
D.单颜色着色模式
4.下面属于Dircct3D提供的创建旋转矩阵的函数的是(
ABC
A. D3DXMatrixRotarionX
A. D3DXMatrixRotarionX
A. D3DXMatrixRotarionX
A. D3DXMatrixRotarionX
A. D3DXMatrixRotarionX
A. D3DXMatrixRotarionX
B. D3DXMatrixRotarionY
C.
D3DXMatrixRotarionZ
D. D3DXMatrixRotXE. D3DXMatrixRotY5.以下属于Direct3D提供的简化纹理过滤的过程的是(ABCD )A.最近点采样 B.线性过滤 C.各向异性过滤 D. mipmap过滤D3DPRESENT PARAMETERS参数很多,下面理解正确的是( ABCD )
A. Windowed取值FALSE则渲染全屏 B. BackBufferCount表示后备缓冲的 数目
C. Swap Effect表示交换缓冲类型D. BackBufferFormat表示后备缓冲的格式以下属于Direct3D +提供的标准光源的是( ABC )
A.点光源 B.方向光源C.聚焦光源D.多点光源关于灵活顶点格式下列说法正确的是( ABD )
A. D3DFVF_DIFFUSE表示顶点数据中包含的是漫反射颜色值;
B. D3DFVF_SPECULAR表示顶点数据中包含的是镜面反射下的颜色值
C. D3DFVF_XYZRHW表示顶点数据中包含的是未经过坐标变换的顶点坐标
D3DF0RMAT Format,//指定索引大小,使用 D3DFMTJNDEX16 为 16 位索 引,〃D3DFMT_INDEX32为32位索引,但并非所有设备都支持32位索引D3DPOOLPool,
IDirect3DlndexBuffer9** ppIndexBuffer, 〃返回创建好的索引缓存的指 针HANDLE* pSharedHandle );9、请给出使用带有索引缓存的模型绘制的函数原型,并解释其参数含义。
使用函数 IDirect3DDevice9::DrawlndexedPrimitive 绘制带索引模型:
HRESULT IDirect3DDevice9::DrawlndexedPrimitive(D3DPRIMITIVETYPE Type,〃要绘制的图元类型INT BaseVertexindex,//为索引增加一个基数,用顶点数目度量UINTMinlndex,〃允许被引用的最小索引值UINT NumVertices,〃本次调用中将被引用的顶点总数UINT Startindex,〃索引缓存中的某个位置,表示开始渲染的开始索引点UINT PrimitiveCount);〃绘制图元总数10、创建一个ID3DXMesh对象,然后从X文件中读取集合信息数据填入到这个对象 中。请给出读取函数的定义,及相关参数的含义。
HRESULT D3DXLoadMeshFromX(
LPCSTR pFil ename, //X 文件名
DWORD Options, 〃创建标志
LPDIRECT3DDEVICE9 pDevice, //与创建Mesh有关的设备
LPD3DXBUFFER* ppAdjaccncy, //返回包含DWORD的ID3DXBuffer类型//的指针,描述Mesh的邻接信息
LPD3DXBUFFER* ppMaterials,〃返回包含D3DXMATERIAL结构的数组//的ID3DXBuffer指针,存储了Mesh的材质数据
LPD3DXBUFFER* ppEffectlnstances,//返PI一个包含D3DXEFFECTINSTANCE结
D3DXEFFECTINSTANCE结
D3DXEFFECTINSTANCE结
D3DXEFFECTINSTANCE结
D3DXEFFECTINSTANCE结
D3DXEFFECTINSTANCE结
//构的数组的ID3DXBuffer类型指针
PDWORD pNumMaterials,
LPD3DXMESH * ppMesh
//返l^lMesh的材质数//返回填充了 X文件几何信息的TD3DXMesh对象);
(五)、程序题1、下面是Alpha纹理实例程序片段,请将程序补充完整。
HRESULT lnitializeD3D( HWND hWnd){
//省略部分代码
g_pd3dDcvicc->SctRcndcrState(D3DRS_CCLLM0DE, D3DCULL_NONE);
〃启用Alpha混合
g_pd3dDevice->SetRenderState(_D3DRS_ALPHABLENDENABLE, true);
〃设置源混合因子
g_pd3dDevice->SetRenderState(_D3DRS_SRCBLEND , D3DBLEND_SRCALP11A);
//设置目标混合因子
g Pd3dDevice->SetRenderState(—D3DRS DESTBLEND, D3DBLEND TNVSRCALPHA);
g_pd3dDcvice->SetTextureStageState(0, D3DTSS_C0L0R0P, D3DT0P SELECTARG1);
g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
g pd3dDevice~>SetTextureStageState(0, D3DTSS ALPHAOP, D3DT0P MODULATE);
g_pd3dDcvicc->SctTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA TEXTURE);
g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALP11AARG2, D3DTA_D1FFUSE);
〃设置纹理过滤方式
g pd3dDevice->SetSamplerState(0,D3DSAMP MAGFTLTER _, D3DTEXF POINT);
//省略部分代码)2、下面是移动线框正方体的程序片段,完成设置观察矩阵及投影矩阵的片段, 请将程序补充完整。
// Position and aim the camera.
D3DXVECT0R3 position(0. Of, 0. Of, —5. Of);
D3DXVECTOR3 target (0. Of, 0. Of, 0. Of);
D3DXVECT0R3 up(0.0f, 1. Of, 0. Of);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V,_&position, &target,&up );
Device->SetTransform(D3DTS_VIEW,&V );
// Set the projection matrix.
D3DXMATRIX proj;
D3DXMatrixPerspcctivcFovLH(&proj,D3DX_PI * 0. 5f,(float)Width / (float)Height,l.Of,1000. Of);
Device->SetTransform(D3DTS_PRO JECTI ON,&proj);3、下面是模拟箱子挡住茶壶,进行深度测试的程序片段,请将程序补充完整。 bool Setup ()
//此处省略部分代码
// 设置 Texture Filter States.
Device->SetSamplerState(O, D3DSAMP MAGFILTER, D3DTEXF LINEAR):
Device->SetSamplerState(O, D3DSAMP MTNFTLTER, D3DTEXF LINEAR);
Device->SetSamplerState(0, D3DSAMP MTPFTLTER, D3DTEXF LINEAR):
//激活深度测试、设置深度测试函数
Dcvice->SetRcnderState(D3DRS_ZENABLE, TRUE);
Device~>SetRenderState(D3DRS_ZFUNC, D3DCMP LESS);
〃此处省略部分代码}LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM 1Param)(
switch ( msg )
(
case WM_KEYUP:
switch (wParam){〃此处省略部分代码case VK ESCAPE:
(Cleanup ();PostQuitMessage(0);)break;case 49://开启深度测试g pd3dDevice->SetRenderState(D3DRS ZENABLE, TRUE);break;case 50://关闭深度测试g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, _FALSE_);break;break;
return DefWi ndowProc(hWnd, msg, wParam, 1 Param);}4、下面是一程序片段,实现从” Tiger, x”文件中读取Mesh相关信息。请将程序 补充完整。
HRESULT InitGeometry()(
LPD3DXBUFFER pD3DXMtrlBuffer;
if( FAILED( D3DXLoadMeshFromX( "Tiger, x”,D3DXMESH SYSTEMMEM,g_pd3dDev ice,NULL,&pD3DXMtrlBuffer,NULL,&g dwNumMaterials,&g_pMesh )))
(if( FAILED( D3DXLoadMeshFromX(.\\Tigcr. x〃,D3DXMES1I_SYSTEMMEM,g_pd3dDevice, NULL,&pD3DXMtrlBuffer, NULL,&g dwNumMaterials,&g_pMesh )))(MessageBox(NULL, z,Could not find tiger. x〃,"Meshes.exe”,MB_OK);return E_FAIL;
D3DXMATERTAL* d3dxMaterials 二(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPoi nter();
g pMeshMaterials = newD3DMATERIAL9 [g_dwNumMat erials];
if( g_pMeshMaterials == NULL )return E_OUTOFMEMORY;
g_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];
if( g_pMeshTextures == NULL )return E OUTOFMEMORY;
for ( DWORD i=0; i<g dwNumMaterials; i++ )
(
gjpMeshMaterials[i] = d3dxMaterials[i]. MatD3D; g_pMeshMaterials[i]. Ambient = g_pMeshMaterials[i]. Diffuse; g_pMeshTextures[i] = NULL;
if( d3dxMaterials[i]. pTextureFi1 ename != NULL &&Istrlen(d3dxMalerials[i]. pTextureFilename) > 0 )(
if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, d3dxMaterials[i]. pTextureFilename,&g_pMeshTextures[i] ))){const TCHAR* strPrefix = TEXT(〃.. \\〃);TCHAR strTexture[MAX_PATH]:
StringCchCopy( strTexture, MAX_PATH, strPrefix );StringCchCat( strTexture, MAX_PATH,d3dxMaterials[i]. pTextureFilename );i f ( FAILED( D3DXCreateTextureFromFi1e( g pd3dDevice,strTexture,&g_pMeshTextures[i])))MessageBox (NULL, z,Could not find texture map〃,"Meshes. exe,z, MB_0K);
pD3DXMtrlBuffcr->Rclcasc();
return S OK;
D. D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标9.关于顶点Alpha描述正确的是( AB )
A. 如果在程序中直接指定每个顶点的颜色,直接给出每个顶点颜色的Alpha 值。
B. 渲染对象中每个像素的Alpha值由该对象的Alpha值和着色模式决定。
C. 高洛德着色模式,所有像素的Alpha值都等于该多边形的第一个顶点的 Alpha 值。
D. 平面着色模式,每个多边形上的像素的Alpha值由它的各个顶点的Alpha 值进行线性插值得到。
(二)、判断部分Direct3D将给每个采样器对象连接一个唯一的纹理阶段(stage),在应用程序 中找出与采样器对象相关联的阶段,并设置相应的纹理和采样器状态给该阶 段。 (正确)一个Direct3D对象只能创建一个Direct3D设备对象。(错误)由于Direct3D设备对象是由Direct3D对象创建的,因此应先释放Direct3D设 备对象。(正确)D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标,不能与 D3DFVF_XYZRHW同时使用。(正确)D3DFVF_XYZ顶点数据中包含未经坐标变换的顶点坐标,可以与 D3DFVF_XYZRHW同时使用。(错误)D3DFVF_XYZRHW顶点数据中包含经过坐标变换的顶点坐标,不能与 D3DFVF_XYZ 和 D3DFVF_N0RMAL 同时使用。(正确)Direct3D创建的场景和对象都是由简单的“图元”按照一定的方式排列组合 而成的,Direct3D中的所有图元都是一维或二维对象,包括单个的点和直线 及复杂的多边形。(正确)在索引缓存中定位顶点也就是在顶点缓存中定位顶点。(正确)二、主观部分:
(一)、填空部分1)像素着色器的输入仅有颜色和纹理坐标两种语义。
2)像素着色器的工作是在顶点着色器之后,后者的输出将为前者提供输入。
3) D3DFVF_DIFFUSE表示顶点数据中包含的是漫反射颜色值;D3DFVF_SPECULAR表示顶点数据中包含的是镜面反射下的颜色值;D3DFVF_XYZRHW表示顶点数据中包含的是经过坐标变换的顶点坐标Direct3DCreate9函数创建一个Direct3D对象并获得指向DirectsD对象接口的 指针,且参数必须设置为D3D_SDK_VERSI0NoDXUT (The DirectX Utility Library)是建立在 Direct3D9 和 Direct3D10 上的一个 程序框架,其目标是建立一个强大而容易使用的Direct3D游戏开发框架,它 简化了 Win32和Direct3D API的使用。
4) 创建DirectX设备对象的函数为CreateDeviceoDirect3D 图形程序通过调用 IDirect3DDevice9::SetRenderState()函数来设置渲 染状态。
5) g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT),这行代 码完成的功能是(设置着色模式为平面着色模式)。
6) g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE/D3DSHADE_GOURAUD),
这行代码完成的功能是(设置着色模式为高洛德着色模式)。
(二)、名词解释1、请你给出创建顶点声明,并获得IDirect3DVertexDeclaration9接口指针的方法。
HRESULT IDirect3DDevice9::CreateVertexDeclaration(
CONST D3DVERTEXELEMENT9* pVertexElements,〃要创建的顶点声明
IDirect3DVertexDeclaration9** ppDecI// 返 回 创 建 的IDirect3DVertexDeclaration9 接〃口指针);2、请你给出环境光(ambient light)的概念,并说明如何设置渲染状态为整个场景 添加环境光。
环境光(ambient light)
由光源发出经环境多次散射而无法确定其方向的光,即好像是来自四面八方 的光;室内成分大,室外成分少,没有位置或方向上的特征,只有颜色亮度 值,不会衰减;
通过设置渲染状态为整个场景添加环境光:
g_device->SetRenderState(D3DRS_AMBIENT,D3DCOLOR_X#);3、请你给出镜面反射光的概念,并说明如何设置渲染状态。
镜面光来自特定方向并被反射到特定方向;在默认状态下,Direct3D不对物 体进行镜面反射计算,需设置相关的渲染状态:
g_device->SetRenderState(D3DRS_SPECULARENABLEJRUE);
如果需要进行漫反射或镜面反射运算,那么在顶点缓冲器中必须包含顶点的 法向量信息;4、请给出设置像素着色器的函数原型及调用示例代码。
HRESULT IDirect3DDevice9::SetPixelShader(
IDirect3DPixelShader9* pShader);
这个方法只接受一个参数,通过它传递一个我们要使用的指向像素着色器的 指针。
示例代码如下:
Device->SetPixelShader(MultiTexPS);5、销毁像素着色器接口函数原型
d3d::Release<IDirect3DPixelShader9*>(MultiTexPS);6、在Direct3D的一个场景中,最多可设置几个光源,设置函数形式。
最多可设置8个光源HRESULT SetLight(DWORD Index,CONST D3DLight9 *pLight);7、光照程序一般步骤。
⑴创建光源、设置其位置及相关属tt; Set Light函数将光源设置到渲染管道 流水线中;LightEnable函数激活光源;
(2) SetRenderState打开渲染管道流水线的光照开关;
(3) 创建材质,设置物体的材质属性,SetMaterial设定材质;8、清给出点列表图元的含义,并说明其应用。
点列表是一个对每点独立进行渲染的顶点集合。程序可以在3D场景中使用 它模拟星空视野,或作为多边形表面的点化线。
9、请给出线段列表图元的含义,并说明其应用。
线段列表是一系列的独立线段,用于为3D场景加入冰雹或大雨等效果,线
段列表中顶点的数量必须是大于等于2的偶数。
10、请给出线段条带图元的含义,并说明其应用。
线段条带是一个由相互链接的线段组合成的造型,程序可以用它产生不封闭 的多边形;11、请给出三角形列表图元的含义,并说明其应用。
三角形列表是一系列独立的三角形,它们之间可能靠的很近,也可能不是, 顶点总数必须能被3整除;使用三角形列表建立一个由离散面片组成的物体; 如建立力场墙的一种方法是指定一个由互相不相连的小三角形组成的大型 列表;然后将一个可以发散光线的材质和纹理应用到这个三角形列表上12、请给出三角形条带图元的含义,并说明其应用。
三角形条带是一连串相邻接的三角形。3D场景中大部分物体都是由三角条 带组成的。
13、请给出三角形扇图元的含义,并说明其应用。
三角形扇和三角形条带类似,但其所有三角形共享一个顶点。3D场景中曲 面的描述。
14、请给出Direct3D中设置渲染状态的函数原型,并解释其参数含义。
Direct3D 图形程序通过调用 IDirect3DDevice9::SetRenderState()0数来设置渲 染状态。枚举类型D3DRENDERSTATETYPE列举出所有可能的渲染状态;使用 SetRenderStatef)设置:
HRESULT IDirect3DDevice9::SetRenderState(D3DRENDERSTATETYPE State,//更改的渲染状态DWORD Value ); 〃新的状态值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、请你给出物体表面材质的定义方式,并解释每个参数的概念。
typedef strcut D3DMATERIAL9(D3DC0L0RVALUE Diffuse;〃慢射光的反射属性D3DC0L0RVALUE Ambient;〃环境光的反射属性D3DC0L0RVALUE Specular; 〃镜面光的反射属性D3DC0L0RVALUE Emissive; //自发光的反射属性float Power;//镜面光的高光强度
1D3DMATERIAL9, *LPD3DMATERIAL9;、简答
1、着色器代码编译后,获得一个IDirect3DVertexShader9接口的指针,它代 表一个顶点着色器,具体方法,及其调用过程。
HRESULT IDirect3DDevice9::CreateVertexShader(
const DWORD* 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宏:
D3DCAPS8 Caps;M_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULTzD3DDEVTYPE_HAL,&Caps);IffCaps.PixelShaderVersion == D3DPS_VERSION(1,1))
lf(Failed(EasyCreateWindowed(m_hWnd,D3DDEVTYPE_HAL,D3DCREATE_HARDWARE_VERTEXPROCESSING)))
Return FALSE;并解释 BackBufferFormat,
并解释 BackBufferFormat,
并解释 BackBufferFormat,
并解释 BackBufferFormat,
并解释 BackBufferFormat,
并解释 BackBufferFormat,
〃全屏幕式后备缓冲的宽度
〃全屏幕式后备缓冲的
〃后备缓冲的格式
〃后备缓冲的数目
3、请给出 D3DPRESENT_PARAMETERS 的定义,Swap Effect, Windowed三个参数的含义。
typedef struct _D3DPRESENT_ PARAMETERS,{
UINTBackBufferWidth;
UINTBackBufferHeight;高度D3DFORMAT
UINT
D3DFORMAT
UINT
D3DFORMAT
UINT
D3DFORMAT
UINT
D3DFORMAT
UINT
BackBufferFormat;BackBufferCount;D3DMULTISAMPLE_TYPE MultiSampleType; 〃全屏抗锯齿类型} D3DPRESENT_PARAMETERS;・BackBufferFormat-一后备缓冲的格式,DX9只支持16位和32位的后备缓 冲格式,如D3DFMT_R5G6B5表示后备缓冲的格式为每个像素16位,红 色5位、绿色6位、蓝色5位,也可设置为D3DFMTJJNKN0WN,这时使 用桌面的格式。
DWORD
MultiSampleQuality;〃全屏抗锯齿质量等级
D3DSWAPEFFECT
Swap Effect;〃交换缓冲类型
HWND
hDeviceWindow;
BOOL
Windowed;〃全屏或窗口
BOOL
EnableAutoDepthStencil;〃激活深度缓冲
D3DFORMAT
AutoDepthStencilFormat; //深度缓冲格式
DWORD
Flags;
UINT
FullScreen_RefreshRatelnHz;〃显示器刷新率
UINT
Presentation Interval; 〃图像最大刷新速度
・Swap Effect-一交换缓冲支持的效果类型,它是D3DSWAPEFFECT枚举类型, 此处设定为D3DSWAPEFFECT_DISCARD,即后备缓存的内容被复制到屏幕 上后,后备缓存的内容失效,可以丢弃。
• Windowed一一如果为FALSE,表示渲染全屏,若为TRUE,则渲染窗口。
4、基于Win32基本框架,绘制文本的函数原型及调用。
在Render函数中通过DrawText函数控制文本显示,该函数是LPD3DXFONT类的 成员函数,其函数原型如下:
INT DrawText ( LPD3DXSPRITE pSprite,LPctstr pStringJNT Count,LPRECT pRect,DWORD Format,D3DCOLOR Color);此处的调用为:g_pFont->DrawText(NULL/ strText,-lz &clientRect,DT_SINGLELINE | DT_NOCLIP | DT_CENTER | DT_VCENTER, Oxffffffff );5、顶点缓存中的顶点可以包含顶点坐标、颜色、法线方向、纹理坐标等属性, 具体包含哪些属性,可以使用灵活顶点格式(Flexible Vertex Format, FVF)进行 描述;请解释下面部分FVF描述符:
D3DFVF_DIFFUSE,D3DFVF_NORMAL, D3DFVF_XYZ, D3DFVF_XYZRHW, D3DFVF_SPECULAR.
D3DFVF_DIFFUSE:顶点数据中包含漫反射颜色值;
D3DFVF_NORMAL:顶点数据中包含法线向量,不能和D3DFVF_XYZRHW同时使用;
D3DFVF_XYZ:顶点数据中包含未经坐标变换的顶点坐标,不能与D3DFVF_XYZRHW 同时使用;
D3DFVF.XYZRHW:顶点数据中包含经过坐标变换的顶点坐标,不能与D3DFVF_XYZ 和 D3DFVF_N0RMAL 同时使用;
D3DFVF_PSIZE:顶点信息指明绘制点的大小;
D3DFVF_SPECULAR:顶点数据中镜面反射效果下的颜色值;6、请给出创建顶点缓存的函数原型,并解释其参数含义。
创建顶点缓存的函数IDirect3DDevice9::CreateVertexBuffer()声明如下:
HRESULT IDirect3DDevice9::CreateVertexBuffer (UINT Length, 〃分配给缓存的字节大小;DWORD Usage,〃指定关于怎样使用缓存的额外信息;DWORD FVF,〃存储在缓存中的灵活顶点格式;D3DPOOLPool, 〃缓存放置在哪一个内存池中;
IDirect3DVertexBuffer9 * * ppVertexBuffer,〃返回创建好的顶点缓存的指 针;HANDLE* pSharedHandle ); 〃没有使用;设置为 0;7、访问顶点缓存数据时需要对其访问区域加锁,清给出加锁函数原型并解释其 参数含义。
HRESULT IDirect3DVertexBuffer9::Lock(
UINT OffsetToLock,//偏移量,以字节为单位,从缓存开始位置到锁定开始位 置的距离
UINT SizeToLock,//锁定的字节数
BYTE** ppbDate,//返回的指向锁定内存开始位置的指针
DWORD Flags ); 〃标记描述如何锁定内存8、请给出创建索引缓存的函数原型,并解释其参数含义。
创建索引缓存的函数如下:
HRESULT IDirect3DDevice9::CreatelndexBuffer(UINT Length, 〃分配给缓存的字节大小;DWORD Usage,〃指定关于怎样使用缓存的额外信息;
展开阅读全文