DirectX函数总结.docx
- 文档编号:26996221
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:71
- 大小:69.69KB
DirectX函数总结.docx
《DirectX函数总结.docx》由会员分享,可在线阅读,更多相关《DirectX函数总结.docx(71页珍藏版)》请在冰豆网上搜索。
DirectX函数总结
网络游戏开发—DirectX
函数归纳总结
DirectX目录
1.D3D基本框架1
创建D3D对象2
获取显卡显示模式2
创建D3D设备接口2
开始渲染和结束渲染2
清空图形绘制区2
屏幕反转2
2.绘制基本图形1
绘制基本图形4
灵活定点格式(FVF)2
基本图元的绘制2
创建顶点缓冲区2
基本图元的绘制2
保存顶点2
设置渲染状态2
图形绘制2
索引缓冲4
顶点设置2
创建索引缓冲区2
保存顶点索引值2
索引图形绘制2
D3D中的图形学4
D3D中的向量2
D3D中的矩阵2
D3D中的平面2
D3D中的射线2
D3D中的图形变换2
3.纹理4
从磁盘文件获取纹理2
设置当前要渲染的纹理2
设置纹理的渲染状态2
设置纹理采样属性2
从一张纹理图形中生成多级纹理2
包装纹理寻址2
镜像纹理寻址2
夹取纹理寻址2
边框颜色纹理寻址2
一次镜像纹理寻址2
纹理包装2
4.光照4
D3D光照的基本实现4
顶点格式2
设置物体材质2
添加光源2
激活光照运算2
5.摄像机4
生成视图变换矩阵2
生成投影变换矩阵2
6.模型基础4
ID3DXMesh接口基础2
ID3DXMesh接口相关2
应用.X文件2
7.游戏中的基本特效4
检查硬件支持的深度缓冲区格式2
激活深度测试2
设置深度缓冲区更新2
设置深度测试函数2
激活Alpha混合2
设置Alpha混合计算方式2
设置Alpha混合系数2
激活Alpha测试2
设置Alpha测试参考值2
设置Alpha测试函数2
多边形填充模式2
查询设备是否支持多重采样2
启用多重采样的全景图形反锯齿2
设置多纹理混合方式2
激活雾化2
设置雾化计算方式2
设置雾的颜色2
设置雾的起始范围2
指数雾化浓度2
基于发散的雾化2
创建2D字体2
绘制字体2
创建3D文字网格2
8.游戏控制4
DirectInput实现键盘控制2
DirectInput实现鼠标控制2
鼠标键选2
9.游戏音乐音效4
D3D基本框架
创建D3D对象:
Direct3DCreate9(D3D_SDK_VERSION)
===============================================================================
DirectX
===============================================================================
获取显卡显示模式:
HRESULTGetAdapterDisplayMode(
UINTAdapter,//指定显示卡序列号
D3DDISPLAYMODE*pMode//存储显示模式的指针
);
===============================================================================
DirectX
===============================================================================
创建D3D设备接口:
HRESULT CreateDevice(
UINTAdapter,//显卡序列号
D3DDEVTYPE DeviceType,//D3D设备类型
HWND hFocusWindow,//所属窗口句柄
DWORD BehaviorFlags,//设备进行3D运算方式
D3DPRESENT_PARAMETERS*pPresentationParameters,//用于存储D3D设备相关信息的指针
IDirect3DDevice9 **ppReturnedDeviceInterface//返回D3D设备接口指针的地址
);
第二个参数DeviceType取值:
D3DDEVTYPE_HAL//硬件抽象层,通过显示硬件来完成图形渲染工作
D3DDEVTYPE_REF//参考光栅器,一般用于测试显卡不支持的D3D功能
D3DDEVTYPE_SW//用于支持第三方软件
第四个参数BehaviorFlags取值:
D3DCREATE_SOFTWARE_VERTEXPROCESSING//由D3D软件进行顶点运算(常用)
D3DCREATE_FPU_PRESERVE//激活双精度浮点运算或浮点运算异常检测,设置该项会降低系统性能
D3DCREATE_MULTITHREADED//保证D3D是多线程安全的,设置该项会降低系统性能
D3DCREATE_MIXED_VERTEXPROCESSING//由混合方式进行顶点运算
D3DCREATE_HARDWARE_VERTEXPROCESSING//由D3D硬件进行顶点运算
D3DCREATE_PUREDEVICE//禁用D3D的Get*()函数,禁止D3D使用虚拟设备模拟顶点运算
===============================================================================
DirectX
===============================================================================
开始渲染和结束渲染:
BeginScene();//开始渲染
……
实际的渲染工作
……
EndScene();//结束渲染
注意:
这两个函数必须成对出现,不允许交错和嵌套的发生,实际的渲染工作在这两个函数的中间进行。
===============================================================================
DirectX
===============================================================================
清空图形绘制区:
HRESULT Clear(
DWORD Count,//清除的矩形区域数量
constD3DRECT *pRects,//清除的矩形区域数组指针
DWORD Flags,//清除的缓冲区标志,指定清除哪一个缓冲区
D3DCOLOR Color,//清除后重置的颜色
float Z,//清除后重置的深度值,从0-1.0
DWORD Stencil//重置的模板值
);
第三个参数Flags取值(可任意组合):
D3DCLEAR_STENCIL//模板缓冲区
D3DCLEAR_TARGET//颜色缓冲区
D3DCLEAR_ZBUFFER//深度缓冲区
===============================================================================
DirectX
===============================================================================
屏幕反转:
HRESULT Present(
CONSTRECT *pSourceRect,//复制源的矩形区域指针
CONSTRECT *pDestRect,//复制目的地的矩形区域指针
HWND hDestWindowOverride,//D3D设备窗口句柄
CONSTRGNDATA *pDirtyRegion//最小更新区域指针
);
注意:
除非D3D的交换链是用D3DSWAPEFFECT_COPY的标志创建,在大多数的情况下,此函数的各个参数都设置为NULL。
===============================================================================
DirectX
===============================================================================
绘制基本图形
灵活定点格式(FVF)
D3D定义的FVF格式:
D3DFVF_XYZ//包含未经变换的顶点坐标
D3DFVF_XYZRHW//包含经过变换的顶点坐标
D3DFVF_XYZW//包含经过变换和裁剪的顶点坐标
D3DFVF_NORMAL//包含法线信息
D3DFVF_PSIZE//点精灵的大小
D3DFVF_DIFFUSE//包含漫反射的颜色信息
D3DFVF_SPECULAR//包含镜面反射的颜色信息
D3DFVF_TEX0……D3DFVF_TEX8//包含0-8个纹理坐标信息
D3DFVF_XYZB1……D3DFVF_XYZB5//包含顶点位置信息和影响顶点变换的权重信息,用于骨骼动画模型中
根据D3D提供的灵活顶点格式,就可以定义自己的顶点结构体,例如,定义一个包含经过变换的坐标信息和漫反射颜色信息的顶点结构如下:
//创建顶点对象
LPDIRECT3DVERTEXBUFFER9g_pVB=NULL;//顶点缓冲区对象
//自定义顶点格式
structCUSTOMVERTEX
{
FLOATx,y,z,rhw;//经过变换的三维坐标
DWORDcolor;//顶点漫反射颜色
};
#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
//以下函数设置顶点数据
CUSTOMVERTEXvertices[]=
{
{100.0f,400.0f,0.5f,1.0f,0xffff0000,},
{300.0f,50.0f,0.5f,1.0f,0xff00ff00,},
{500.0f,400.0f,0.5f,1.0f,0xff0000ff,},
};
===============================================================================
DirectX
===============================================================================
基本图元的绘制
HRESULT
(
D3DPRIMITIVETYPE PrimitiveType,//基本图元类型
UINT StartVertex,//起始顶点
UINT PrimitiveCount//绘制图元的数量
);
第一个参数PrimitiveType取值:
D3DPT_POINTLIST//点列集合(一组点的集合)
D3DPT_LINELIST//线列集合(一组线段的集合)
D3DPT_LINESTRIP//线带集合(首尾相连的线段的集合)
D3DPT_TRIANGLELIST//三角形列(一组三角形的集合)
D3DPT_TRIANGLESTRIP//三角形带(首尾相连的三角形,有两个顶点重合)
D3DPT_TRIANGLEFAN//三角形扇(组成扇形的一组三角形)
===============================================================================
DirectX
===============================================================================
创建顶点缓冲区
HRESULT CreateVertexBuffer(
UINT Length,//顶点缓冲区的大小,按字节数算
DWORD Usage,//顶点缓冲区属性
DWORD FVF,//灵活顶点格式
D3DPOOL Pool,//顶点缓冲区的内存类型
IDirect3DVertexBuffer9** ppVertexBuffer,//顶点缓冲区指针地址
HANDLE* pSharedHandle//保留参数,置为0
);
*Usage:
参数Usage用于指定顶点缓冲区的属性,其取值可以设为0,或下面任意值的组合。
D3DUSAGE_WRITEONLY//只写属性,不能进行读操作,设置该属性可以提高系统性能
D3DUSAGE_DYNAMIC//指定顶点缓冲区要求使用动态内存
D3DUSAGE_NPATCHES//使用顶点缓冲区绘制N-patches曲线
D3DUSAGE_POINTS//指定顶点缓冲区存储原始点
D3DUSAGE_RTPATCHES//使用顶点缓冲区绘制高阶图元(high-orderprimitive)
D3DUSAGE_SOFTWAREPROCESSING//使用软件进行顶点运算,否则使用硬件计算
*Pool:
参数Pool属于枚举类型D3DPOOL,指定顶点缓冲区资源的内存位置,如下:
typedefenum_D3DPOOL {
D3DPOOL_DEFAULT=0,//默认值,顶点缓冲区尽可能存在于显存中
D3DPOOL_MANAGED=1,//由D3D的资源管理器自动调度顶点缓冲区内存位置
D3DPOOL_SYSTEMMEM=2,//顶点缓冲区位于内存中
D3DPOOL_SCRATCH=3,//定点缓冲区位于计算机临时内存中,只能进行内存加锁拷贝
D3DPOOL_FORCE_DWORD=0x7fffffff//强制将此ENUM编译为32位,无其他意义
}D3DPOOL;
下面的函数创建了一个顶点缓冲区来保存一个三角形的顶点信息:
//创建顶点缓冲
if(FAILED(g_pDevice->CreateVertexBuffer(
UINT Length:
3*sizeof(CUSTOMVERTEX),
DWORD Usage:
D3DUSAGE_WRITEONLY,
DWORD FVF:
D3DFVF_CUSTOMVERTEX,
D3DPOOL Pool:
D3DPOOL_DEFAULT,
ppVertexBuffer:
&g_pVB,
pSharedHandle:
NULL)))
{
returnE_FAIL;
}
===============================================================================
DirectX
===============================================================================
保存顶点
HRESULT Lock(
UINT OffsetToLock,//加锁内存起始地址
UINT SizeToLock,//加锁内存大小
VOID **ppbData,//返回内存指针地址
DWORD Flags//加锁属性
);
DWORD Flags:
指定了顶点缓冲区的加锁属性,它可以取值为0,或者如下中的任意组合:
D3DLOCK_DISCARD//仅在动态缓冲区下使用,硬件丢弃原缓冲区并创建一个新的缓冲区
D3DLOCK_NO_DIRTY_UPDATE//在缺省状态下,对缓冲区加锁将会在该区域设置一个Dirty标志,该属性将不对该区域设置Dirty标志
D3DLOCK_NOSYSLOCK//在加锁的过程中系统可进行其他操作
D3DLOCK_READONL//设置缓冲区位制度属性
D3DLOCK_NOOVERWRITE//尽在动态缓冲区下使用,保证不覆盖缓冲区数据,即向缓冲区中添加数据,允许在渲染时添加数据到缓冲区
//以下代码保存了顶点
//锁定顶点缓冲
if(FAILED(g_pVertexBuffer->Lock(0,sizeof(Vertices))))
{
returnE_FAIL;
}
//拷贝顶点信息
memcpy(g_pVB,vertices,size(vertices));
//解锁
g_pVertexBuffer->Unlock();
===============================================================================
DirectX
===============================================================================
设置渲染状态
HRESULT SetRenderState(
D3DRENDERSTATETYPE State,//需要渲染的状态
DWORD Value//代表设置的渲染状态的值
);
===============================================================================
DirectX
===============================================================================
图形绘制
*设置资源流
HRESULT SetStreamSource(
UINT StreamNumber,//渲染数据流序号
IDirect3DVertexBuffer9 *pStreamData,//进行绑定的顶点缓冲区指针
UINT OffsetInBytes,//进行绑定连接的渲染数据流的起始位置
UINT Stride//渲染数据流中一个顶点所占的内存的大小
);
*设置顶点格式
HRESULT SetFVF(
DWORD FVF//灵活顶点格式
);
*绘制基本图元
HRESULT DrawPrimitive(
D3DPRIMITIVETYPE PrimitiveType,//绘制的图元类型
UINT StartVertex,//绘制的起始顶点
UINT PrimitiveCount//绘制的图元数量
);
//Desc:
渲染图形
VOIDRender()
{
//清空后台缓冲区
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),1.0f,0);
//开始在后台缓冲区绘制图形
if(SUCCEEDED(g_pd3dDevice->BeginScene()))
{
g_pd3dDevice->SetStreamSource(0,g_pVB,0,sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);//画一个三角形
g_pd3dDevice->EndScene();//结束在后台缓冲区绘制图形
}
g_pd3dDevice->Present(NULL,NULL,NULL,NULL);//将在后台缓冲区绘制的图形提交到前台缓冲区显示
}
===============================================================================
DirectX
===============================================================================
索引缓冲
顶点设置
//下面代码片段设置了索引缓冲的值
//-----------------------------------------------------------------------------
//Desc:
全局变量
//-----------------------------------------------------------------------------
LPDIRECT3DVERTEXBUFFER9g_pVB=NULL;//顶点缓冲区对象
LPDIRECT3DINDEXBUFFER9g_pIB=NULL;//索引缓冲区对象
//-----------------------------------------------------------------------------
//Desc:
顶点结构和灵活顶点格式
//-----------------------------------------------------------------------------
structCUSTOMVERTEX
{FLOATx,y,z,rhw;//经过坐标转换的顶点位置
DWORDcolor;//顶点漫反射颜色值
};
#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
//-----------------------------------------------------------------------------
//Desc:
创建顶点缓冲区和索引缓冲区
//-----------------------------------------------------------------------------
HRESULTInitVB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DirectX 函数 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)