//Direct3D 9.0 SDK 开发参考Direct3D 9.0 SDK 文档 (中文版)
词汇表
DirectX 8 教程
你也可以把 COM 对象就想象成一套为某个主题而设计的一整套库函数。DX 就提供了一套完整的设计3D游戏的库。
http://baike.baidu.com/view/1169027.htm
使用DirectX的不同组件,你需要链接不同的静态库。例如你要使用DirectDraw组件,你就需要ddraw.lib。
对于DirectDraw,这个头文件是ddraw.h。//com编程
D3D.H
http://wowe1314.blog.163.com/blog/static/2358876200751191213583/
在Direct3D编程中,我们要做的工作基本上可以归纳为:
调用适当的函数获取接口指针;
调用接口的方法(成员函数)来完成所需功能;
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。
http://www.lihuasoft.net/article/show.php?id=2928
Microsoft_DirectX_9.0c里的 9个DirectX的DLL
DX9和DX10在渲染流水线上都是有天壤之别的,好在DX高版本开发包运行库中包含了对低版本开发包运行库的实现,所以用DX8开发的程序,DX9运行库也能够很好的支持,在安装有D9运行库的系统上跑DX8开发的程序不需要再安装DX8运行库,但是这个兼容性支持在最近被微软逐渐放弃,有时候DX9的不同更新版本做的程序也不能向下兼容,比如DX9FEB2007SDK,同DX9AUG2006SDK在shader编译规则上也是不同的,2007放弃了VS2.0和PS2.0以下版本shader的支持,同时对于HLSL中#include相对路径引用的默认根目录也是有区别的.openGL的shader扩展不同的厂商有不同的扩展开发包,但是这种情况随着GLSL和openGL2.0的出现有所改观.同时OpenGL是跨平台的而DX不是,这意味着用OpenGL和GNU C++规则开发的程序可以同时在Linux,unix和安装有GNU环境的Windows上同时运行。从效率上来看,DX由于数据时批量写入显存的,同OpenGL的单条函数写入来讲DX效率上要高一些,不过近来OpenGL也支持了批写入,只是支持批写入的OpenGL放弃了openGL一惯的优势也就是语言架构上的简洁使得函数的数目变得很冗杂。在效果上看DX9同支持GLSL或CG扩展的openGL可以实现相同的显示效果。但是有一点不同是DXUT和D3DX在一些基础绘制上比glu和openGL ARB Extend要差一点,比如绘制虚线,DX没有好的函数可以是实现这一功能。但是DX的扩展工具比openGL扩展工具又有多余的优势比如向量计算,GUI控件,mesh优化和曲面展开,PRT预计算等等和性能测试等等上又要强一点。DX10同OpenGL比较就感觉openGL不是同一个数量级上的产品,DX10在渲染流水线和架构上和能够实现的效果上要比DX9和openGL进步的多。要做面向未来的游戏产品尽量还是用DX10吧。
LPDIRECT3D9 D3D主接口
LPDIRECT3DDEVICE9 D3D硬件主接口
LPDZRECT3DVERTXBUFFER9 顶点缓冲区接口
LPD3DVIEWPORT9 视口接口
LPD3DDISPLAYMODE D3D设备显示模式接口
LPD3DPRESENT_PARAMETERS 创建结构用来保存设备的显示模式接口
LPD3DXVECTOR3 3D向量接口
LPDIRECT3DTEXTURE9 纹理接口
ID3DXSprite 精灵接口
g.pvb 成员函数
g_pD3D 成员函数
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm) 获取显示模式
g_pd3dDevice 成员函数
g_pd3dDevice->SetRenderState(,BOOL) 是否开启灯光
g_pd3dDevice->SetTransform( D3DTS_WORLD, &(matWorld * matWorld_x));//将上面计算出来的旋转矩阵,设置为世界变换矩阵
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );写入流
g_pd3dDevice->SetFVF() 设置FVF
g_pd3dDevice->DrawIndexedPrimitive( 画形状, 0, 0, 点个数, 0, 三角形个数 ); 画
timeGetTime 当前系统的时间
DIRECT3DTXTURE 文理接口
BITMAPPEILEHEADER 文件头
BITMAPINFOHEADER 信息头
fread 读一个数据块
biBitcout 每个象素占几个字节
bicompression 是否被压缩
fseek 跳,偏移指针
greatetxture 创建一个空文理
D3Dcaked_RECT 锁定结构体
setTexturestagestata 设置文理操作
CONSTD3DMATRIX* 进行变换的变换矩阵
结构体
D3DPRESENT_PARAMETERS 存储D3D设备信息
D3DXMATRIX 修改矩阵
数组
CUSTOMVERTEX 设置顶点位置颜色信息
矩阵函数
D3DXMATRIX * D3DXMatrixIdentity(POut,pM) 单位矩阵
D3DXMATRIX * D3DXMatrixTranspose(上) 矩阵转置
D3DXMATRIX * D3DXMatrixInverse(上中间加个FLOAT) 逆矩阵
D3DXMATRIX * D3DXMatrixTransformation()
D3DXMATRIX* D3DXMatrixTranslation(输出矩阵,X,Y,Z) 平移变换
D3DXMATRIX * D3DXMatrixScaling(上) 缩放变换
FLOAT D3DXPlaneDotCoord(pp,pv) 点和平面之见的关系
D3DXPLANE * D3DXPlaneFromPointNormal(POUT,PPOINT,PNORMAL) 构造子
D3DXPLANE * D3DXPlaneFromPoints(Pout,pv1,pv2,pv3) 通过点来描述平面
D3DXPLANE * D3DPlaneNormalize(POUT,PP) 标准化一个平面
D3DXPLANE * D3DXPlaneTransform(POUT,PP,PM) 平移平面
D3DXM
转换函数
D3DXMATRIX* D3DXMatrixLookAtLH(输出用于视图转换的矩阵,摄象机的位置,摄象机面向的位置,摄象机的正方向) 视图转换的矩阵
D3DXMATRIX* D3DXMatrixOrthoLH(输出用于正交投影的交换矩阵,取景宽,取景高,取景离摄象机的最近距离,取景离摄象机的最远距离) 正交投影变换矩阵
D3DXMATRIX* D3DXMatrixPerspectiveFovLH(输出用于透视投影的交换矩阵,摄象机镜头的夹角Y,平截台体的纵横比,近平截面的距离,远平截面的距离) 透视投影的矩阵
Direct3DCreate9(D3D版本) 创建D3D对象
设备函数
SetTransform(变换的类型,变换的变换矩阵) 设置左手或右手坐标
SetViewport(视口指针) 设置远近距离
GetClientRect(hWnd,*RECT) 获取窗口绘图区域
memcpy(指针,数组,长度) 拷贝
SetStreamSource(0,G.pvb接口指针,0,长度) 数据流
GetAdapterDisplayMode(指定显示卡序列号,存储显示模式的指针) 获取显卡的模式
HRESULT CreateDevice(显卡序列号,D3D设备类型,所属窗口句柄,D3D进行3D运算,存储D3D设备相关信息指针,返回D3D设备借口指针的地址) 创建设备借口
HRESULT CreateVertexBuffer(顶点缓冲区大小(字节),顶点缓冲区属性,灵活顶点格式,顶点缓冲区内存位置,顶点缓冲区指针地址,保留参数通常为0) 创建顶点缓冲
HRESULT CreateIndexBuffer(索引缓冲区大小(字节),顶点缓冲区属性,FMT颜色,顶点缓冲区内存位置,索引缓冲区指针地址,保留参数通常为0) 创建索引缓冲
HRESULT Lock(加锁内存起始地址,加锁内存大小,返回内存指针地址,加锁属性) 加缩内存
HRESULT UnLock() 解锁
HRESULT SetStreamSource(渲染数据流序列号,进行绑定连接的顶点缓冲区指针,进行绑定连接渲染数据流的起始位置,渲染数据流中一个顶点所占的内存大小) 顶点缓冲区和渲染数据流连接
HRESULT SetFVF(灵活顶点格式) 设置顶点格式
HRESULT DrawPrimitive(绘制的图元类型,绘制的开始顶点的索引值,绘制的图元数量) 画到后向缓冲区
HRESULT DrawPrimitiveup() 可以直接画
HRESULT Preesent(复制源的矩形区域指针,复制目的地的矩形区域指针,D3D设备窗口句柄,最小更新区域指针) 屏幕翻转
HRESULT SetIndices(使用的索引缓冲区指针) 设置当前绘制的索引数组
DrawIndexedPrimitive(图元类型,绘制到的索引缓冲区的开始地址,最小的索引数组元素的值,顶点的数目,开始的索引数组元素的值,绘制的数量) 同DrawPrimitive()
绘制函数
HRESULT DrawPrimitive(基本图元类型,起始顶点,绘制的图元的数量) 图元绘制
HRESULT Clear(清楚的矩形区域数量,清除的举行区域数组指针,清楚哪个缓冲区,清除后重置的颜色,清除后重置的深度,0-1.0,重置的摸版值) 清空图形绘制区
HRESULT BeginScene() 开始绘制
HRESULT EndScene() 结束绘制
纹理函数
CreateTexture() 创建D3D纹理对象
LoadBmpTeture() 装载文理函数
LoadBmpTexture24Bit (LPDIRECT3DDEVICE9 pDevice,LPCSTR pSrcFile,LPDIRECT3DTEXTURE9* ppTexture) 24位纹理
D3DXCreateTextureFromFile(D3D设备指针,纹理图形文件,存储D3D文理的指针地址) 直接从磁盘获取纹理
D3DXCreateTextureFromFileEx(D3D设备指针,纹理图形文件,指定纹理宽,高,指定渐进纹理序列级数,纹理使用方式一般为0,指定纹理图形格式,纹理存放的内存类型一般位为0,纹理过滤方式,自动生成的纹理序列过滤方式,设置透明色,图形文件信息存放地址可设置0,调色板存储地址,创建的D3D文理的指针地址) 高级获取纹理
HRESULT SetTexture(多级纹理的索引0-7,D3D的纹理接口指针) 设置当前要渲染的纹理
HRESULT SetTextureStageState(多级纹理的索引,纹理渲染状态的类型,纹理渲染状态的值,与类型相对应) 设置纹理的渲染状态
HRESULT SetSamplerState(指定纹理属性0-7,纹理采样属性类型,设置纹理采样属性) 纹理采样
HRESULT CheckDeviceFormat(指定显卡序列号,D3D设备类型,指定显示模式格式,缓冲区属性,需要使用查询的格式的设备类型,需要查询的显示格式) 纹理压缩
HRESULT LockRect(指定加锁的纹理级别,指向D3DLOCKED_RECT结构,要加锁的RECT区域-0代表整个区域,加锁类型-取0或下表的值) 锁定纹理
HRESULT UnlockRect(解锁的纹理级别) 解锁纹理
向量函数
D3DXVECTOR3 * D3DXVer3Length(V) 向量模的计算
D3DXVECTOR3 * D3DXVec3Normalize(返回指针,V) 单位化
D3DXVECTOR3 * D3DXVec3Add(返回的指针,u,v) 向量加法
D3DXVECTOR3 * D3DXVec3Subtract(同上) 减法
D3DXVECTOR3 * D3DXVec3Cross(同上) 向量X乘
D3DXVECTOR3 * D3DXVec3Lerp(同上) 数乘
D3DXVECTOR3 * D3DXVec3Maximize(同上) 取最大值
D3DXVECTOR3 * D3DXVec3Minimize(同上) 取最小值
D3DXVECTOR3 * D3DXVec3Scale(返回指针,PV,FLOAT) 比例
FLOAT D3DXVec3Dot(pv1,pv2) 点乘
参见编程精粹.chm中的COM中模块的导出函数
Private Type D3DVECTOR
x As Single
y As Single
z As Single
End Type
'返回3D向量的规格化向量
Private Declare Function D3DXVec3Normalize Lib "DX8VB.DLL" Alias "VB_D3DXVec3Normalize" (VOut As D3DVECTOR, v As D3DVECTOR) As Long
Private Declare Function D3DXVec3Add Lib "DX8VB.DLL" Alias "VB_D3DXVec3Add" (VOut As D3DVECTOR, v1 As D3DVECTOR, V2 As D3DVECTOR) As Long
Private Declare Function D3DXVec3Subtract Lib "DX8VB.DLL" Alias "VB_D3DXVec3Subtract" (VOut As D3DVECTOR, v1 As D3DVECTOR, V2 As D3DVECTOR) As Long
Private Declare Function D3DXVec3Length Lib "DX8VB.DLL" Alias "VB_D3DXVec3Length" (v As D3DVECTOR) As Single
D3DFVF 自由顶点的格式
D3DFVF_DIFFUSE 包含谩反射的信息
D3DFVF_NORMAL 包含法线信息
D3DFVF_PSIZE 顶点信息指明绘制点的大小
D3DFVF_SPECULAR 包含镜面反射的信息
D3DFVF_XYZ 包含未经转换的顶点坐标
D3DFVF_XYZRHW 包含经过转换的顶点坐标
D3DFVF_XYZB1 through D3DFVF_XYZB5 包含用于骨骼动化的顶点和顶点对骨骼的权重信息
D3DFVF_XYZW 包含经过转换和裁剪的顶点坐标
D3DTRANSFORMSTATETYPE 变换的类型
D3DPRIMITIVETYPE 定义基本图元
D3DPT_POINTLIST 一组点的集合
D3DPT_LINELIST 一组线的集合
D3DPT_LINESTRIP 首尾相连的线段的集合
D3DPT_TRIANGLELIST 一组三角形的集合
D3DPT_TRIANGLESTRIP 首尾相连的三角形,有两个顶点集合
D3DPT_TRIANGLEFAN 组成扇形的一组三角形集合
D3DPT_FORCE_DWORD 未定义的
D3DDISPLAYMODE 屏幕显示模式
D3DFMT_UNKNOWN 未知的象素格式
D3DFMT_R8G8B8 24位色,RGB各占8位
D3DFMT_A8R8G8B8 32位色,@RGB各占8位
D3DFMT_X8R8G8B8 32位色,X为保留8位 RGB各占8位
D3DFMT_R5G6B5 16位色,R占5,G占6,B占5位
D3DFMT_X1R5G5B5 16位色,保留1位,RGB各占5位
D3DFMT_A1R5G5B5 16位色,@占1位,RG5各占5位
D3DFMT_A4R4G4B4 16位色,@RGB各占4位
D3DFMT_R3G3B2 8位色,R3,G3,B2位
D3DFMT_A8 只有8位@
D3DFMT_A8R3G3B2 16位色,@8,R3,G3,B2位
D3DFMT_X4R4G4B4 16位色
D3DFMT_A2B10G10R10 32位色,@占2位,RGB各10位
D3DFMT_A8B8G8R8 32位色
D3DFMT_X8B8G8R8 32位色
D3DFMT_G16R16 32位色,只有红和绿
D3DFMT_A2R10G10B10 32位色
D3DFMT_A16B16G16R16 64位色
D3DFMT_A8P8 8位色,8位表示半透明,8位表示颜色
D3DFMT_P8 8位色,用牙色索引值表示
D3DFMT_L8 8位色,只表示亮度
D3DFMT_L16 16位色,只表示亮度
D3DFMT_A8L8 16位色,8位表示半透明,8位表示亮度
D3DFMT_A4L4 8位色,4位表示半透明,4位表示亮度
D3DDEVTYPE_HAL 硬件抽象层,通过显示硬件来完成图形渲染工作
D3DDEVTYPE_NULLREF
D3DDEVTYPE_REF 参考光栅器,一般用语测试显示卡不支持的D3D功能
D3DDEVTYPE_SW 用语支持第三方的软件
D3DDEVTYPE_FORCE_DWORD 扩展的
D3DCREATE 3D运算的方式
D3DCREATE_ADAPTERGROUP_DEVICE
D3DCREATE_DISABLE_DRIVER_MANAGEMENT
D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX
D3DCREATE_FPU_PRESERVE 激活双精度浮点运算或浮点运算异常检测,设置该项会降低系统性能
D3DCREATE_HARDWARE_VERTEXPROCESSING 由D3D硬件进行顶点预算
D3DCREATE_MIXED_VERTEXPROCESSING 由混合方式进行顶点运算
D3DCREATE_MULTITHREADED 支持多线程绘制,设置该项会降低系统性能
D3DCREATE_NOWINDOWCHANGES
D3DCREATE_PUREDEVICE 禁用D3D的GET*()函数,禁止D3D使用虚拟设备模拟顶点运算
D3DCREATE_SCREENSAVER
D3DCREATE_SOFTWARE_VERTEXPROCESSING 由D3D软件进行顶点运算
D3DSWAPEFFECT 取值列表
D3DSWAPEFFECT_DISCARD 后台缓冲区复制到前台时,清除后台缓冲区内容
D3DSWAPEFFECT_FLIP 后台缓冲区内容复制后,保持不变,有多个后台缓冲区时使用
D3DSWAPEFFECT_COPY 后台缓冲区内容复制后,保持不变,只有1个后台缓冲区时使用
D3DSWAPEFFECT_FORCE_DWORD 强迫该直作为32位存储,通常不用
D3DPRESENT 屏幕反转模式列表
D3DPRESENT_DONOTWAIT
D3DPRESENT_INTERVAL_DEFAULT 默认的同ONE
D3DPRESENT_INTERVAL_ONE 当屏幕刷新一次时前台后台进行交换
D3DPRESENT_INTERVAL_TWO 当屏幕刷新二次时前台后台进行交换
D3DPRESENT_INTERVAL_THREE 当屏幕刷新三次时前台后台进行交换
D3DPRESENT_INTERVAL_FOUR 当屏幕刷新四次时前台后台进行交换
D3DPRESENT_INTERVAL_IMMEDIATE 图形绘制完成时立即进行交换
D3DPRESENT_LINEAR_CONTENT
D3DUSAGE 缓冲区属性值列表
D3DUSAGE_AUTOGENMIPMAP
D3DUSAGE_DEPTHSTENCIL
D3DUSAGE_DMAP
D3DUSAGE_DONOTCLIP 禁用裁剪,表示顶点缓冲区中的顶点不进行裁剪,当设置该属性时,渲染状态D3DRS_CLIPPING必须设为FALSE
D3DUSAGE_DYNAMIC 使用动态内存分配
D3DUSAGE_NPATCHES 使用顶点缓冲区绘制N-patches曲线
D3DUSAGE_POINTS 使用顶点缓冲区绘制点
D3DUSAGE_RENDERTARGET
D3DUSAGE_RTPATCHES 使用顶点缓冲区绘制曲线
D3DUSAGE_SOFTWAREPROCESSING 使用软件进行顶点运算,否则使用硬件计算
D3DUSAGE_WRITEONLY 只写属性,不能进行读操作,设置该属性可以提高系统性能
D3DPOOL 缓冲区资源内存位置列表
D3DPOOL_DEFAULT 默认的,顶点缓冲区尽可能存在与显存中
D3DPOOL_MANAGED 由D3D自动调度顶点缓冲区内存位置(显存和内存)
D3DPOOL_SCRATCH 顶点缓冲区位于计算机的临时内存中,这种类型的顶点缓冲区不能直接进行渲染,只能进行内存枷锁,拷贝等操作
D3DPOOL_SYSTEMMEM 顶点缓冲区位于内存中
D3DLOCK 缓冲区加锁
D3DLOCK_DISCARD 更新整个缓冲区
D3DLOCK_DONOTWAIT
D3DLOCK_NO_DIRTY_UPDATE 在加锁的过程中系统进行其他操作(默认有Dirty标记)
D3DLOCK_NOOVERWRITE 保证不腹稿缓冲区数据,设置该属性可以立即返回内存指针,提高系统性能
D3DLOCK_NOSYSLOCK 在加锁的过程中系统可能执行其他操作
D3DLOCK_READONLY 设置缓冲区位只读属性
D3DXVECTOR3 向量算法
D3DXVECTOR3u(x,y,z);
D3DXVECTOR3v(x,y,z);
float 变量=D3DXVec3Dot(u指针,v指针) 点乘
D3DXMATRIX 矩阵
D3DXMatrixIdentity 单位矩阵
D3DXMatrixInverse 逆矩阵
D3D实现图形变换
D3DXMatrixTranslation 平移矩阵
D3DXMatrixLockAtLH 观察矩阵
D3DXMatrixIdentity 将一个矩阵单位化
D3DXMatrixRotationY 绕Y轴转
D3DXMatrixRotationX 绕X轴转
D3DXMatrixRotationZ 绕Z轴转
D3DXMatrixScaling 缩放变换
D3DXMatrixMuLationAxis 围绕任意一个轴旋转
D3DXMatrixMultiply 组合变换
D3DUSAGE 纹理使用
D3DUSAGE_AUTOGENMIPMAP 自动生成多级渐进纹理序列,该方式在资源处于D3DPOOL_SYSTEMMEM时无效
D3DUSAGE_DEPTHSTENCIL 深度模版缓冲区,只在资源处于D3DPOOL_default时有效
D3DUSAGE_DMAP 该纹理是一个置换纹理
D3DUSAGE_DONOTCLIP
D3DUSAGE_DYNAMIC
D3DUSAGE_NPATCHES
D3DUSAGE_POINTS
D3DUSAGE_RENDERTARGET 该文理是一个渲染目标缓冲区
D3DUSAGE_RTPATCHES
D3DUSAGE_SOFTWAREPROCESSING 应用坐标变换
D3DUSAGE_WRITEONLY
D3DTEXTURESTAGESTATETYPE 渲染状态类型
D3DTSS_COLOROP 1 文理层的颜色混合方式
D3DTSS_COLORARG1 2 颜色混合的第一个参数
D3DTSS_COLORARG2 3 颜色混合的第二个参数
D3DTSS_ALPHAOP 4 指定纹理层的Alpha透明
D3DTSS_ALPHAARG1 5 Alpha混合的第一个参数
D3DTSS_ALPHAARG2 6 Alpha混合的第二个参数
D3DTSS_BUMPENVMAT00 7 绘制凹凸纹理时
D3DTSS_BUMPENVMAT01 8 绘制凹凸纹理时
D3DTSS_BUMPENVMAT10 9 绘制凹凸纹理时
D3DTSS_BUMPENVMAT11 10 绘制凹凸纹理时
D3DTSS_TEXCOORDINDEX 11 该纹理层使用的纹理坐标的索引
D3DTSS_BUMPENVLSCALE 22 绘制凹凸纹理的缩放参数
D3DTSS_BUMPENVLOFFSET 23 绘制凹凸纹理的平移参数
D3DTSS_TEXTURETRANSFORMFLAGS 24 控制纹理坐标的转换标志
D3DTSS_COLORARG0 26 指定混合过程的第三个颜色
D3DTSS_ALPHAARG0 27 Alpha混合的第三个参数
D3DTSS_RESULTARG 28 颜色混合的结果输出寄存器
D3DTSS_CONSTANT 32 颜色混合的常量寄存器
D3DTSS_FORCE_DWORD 0x7fffffff 强制转换为32位,通常不用
D3DSAMPLERSTATETYPE 纹理采样属性
D3DSAMP_ADDRESSU 1 包装纹理
D3DSAMP_ADDRESSV 2 包装纹理
D3DSAMP_ADDRESSW 3 包装纹理
D3DSAMP_BORDERCOLOR 4
D3DSAMP_MAGFILTER 5 处理放大过滤
D3DSAMP_MINFILTER 6 处理缩小过滤
D3DSAMP_MIPFILTER 7 多纹理过滤
D3DSAMP_MIPMAPLODBIAS 8 多级文理级数偏移值,初试直为0
D3DSAMP_MAXMIPLEVEL 9 最大多纹理级别,初试值为0
D3DSAMP_MAXANISOTROPY 10 各向异性,初试值为1
D3DSAMP_SRGBTEXTURE 11
D3DSAMP_ELEMENTINDEX 12
D3DSAMP_DMAPOFFSET 13
D3DSAMP_FORCE_DWORD 0x7fffffff 强制转换32位,通常不用
纹理寻址
D3DTADDRESS_WRAP 1 包装纹理寻址
D3DTADDRESS_MIRROR 2 镜像纹理寻址
D3DTADDRESS_CLAMP 3 夹取纹理寻址
D3DTADDRESS_BORDER 4 边框颜色纹理寻址
D3DTADDRESS_MIRRORONCE 5 一次镜像纹理寻址
D3DTADDRESS_FORCE_DWORD 0x7fffffff强制转换32位,通常不用
世界变换
D3DTS_WORLD 世界变换