本来是写在文本文档里的,但查找起来不方便,看起来太累。
第一章
Direct3DCreate9:创建一个Direct3D接口对象,常用D3D_SDK_VERSION做参数,参数为空则创建接口时将出现些错误
GetAdapterDisplayMode:该函数将返回当前显示的信息,如桌面分辨率(宽度和高度)、显示格式、显示器刷新频率等。
该函数的参数包括正在查询的适配器以及保存信息的显示模式对象。将D3DADAPTER_DEFAULT发送给函数,这样就可以详细
说明代码,通过这些代码可以获取想要的主显卡信息。
D3DPRESENT_PARAMETERS:该结构体定义Direct3D窗口的显示信息
typedef struct _D3DPRESENT_PARAMETERS_
{
UINT BackBufferWidth; // 窗口的宽度
UINT BackBufferHeight; // 窗口的高度
D3DFORMAT BackBufferFormat; // 后台缓存的格式,D3DFMT_DEFAULT发送给该参数,就会得到所用到的桌面格式
UINT BackBufferCount; // 指定的想要用于渲染的后台缓存总数
D3DMULTISAMPLE_TYPE MultiSampleType; // 处理交换效果
DWORD MultiSampleQuality; // 处理交换效果
D3DSWAPEFFECT SwapEffect; // 处理交换效果
HWND hDeviceWindow; // 创建的窗口句柄
BOOL Windowed; // 指定创建的窗口是否是全屏窗口
BOOL EnableAutoDepthStencil; // 设置是否用Direct3D管理缓存深度以及模板缓存
D3DFORMAT AutoDepthStencilFormat; // 深度缓存或模板缓存的像素格式
DWORD Flags; // 一些附加的特性
UINT FullScreen_RefreshRateInHz; // 存储显示器的刷新率
UINT PresentationInterval; // 处理可以显示的交换链的后台缓存的最大次数
} D3DPRESENT_PARAMETERS;
Flags标识符可以是D3DPRESENTFLAG_DEVICECLIP、D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL和D3DPRESENTFLAG_LOCKABLE_BUFFER或
D3DPRESENTFLAG_VIDEO的任意组合。
FullScreen_RefreshRateInHz存储显示器的刷新率。对窗口模式而言,该值必须为0,但对全屏模式而言,该值取决于显示器。
HRESULT CreateDevice(
UINT Adapter, // 指定正在使用的显卡
D3DDEVTYPE DeviceType, // 指定Direct3D中的渲染方式 HAL,REF, NULLREF,SW(可插拔)
HWND hFocusWindow, // 窗口句柄
DWORD BehaviorFlags, // 指定设备的运行方式
D3DPRESENT_PARAMETERS* pPresentationParameters, // 指向创建的D3DPRESENT_PARAMETERS结构
IDirect3DDevice9** ppReturnedDeviceInterface // 指向新创建的Direct3D设备对象
);
D3DPOOL_MANAGED标志指定一个由系统管理的资源,该类型资源在设备丢失和操作状态间的转换中持续存在
如果设备必须被销毁重建,则用该方式创建的资源也需重建。IDirect3DDevice9::Reset
Clear()函数的参数包括:要清除的矩形数目(0代表清除整个屏幕)、定义想要清除的屏幕区域矩形链表(NULL代表整个屏幕)、标识要清除内
容的标识符、清除后的颜色、要设定的深度值、设定模板缓存值。对标识符参数而言,D3DCLEAR_DEFAULT清除所有的渲染目标,
D3DCLEAR_STENCIL清除模板缓存,而D3DCLEAR_ZBUFFER清除深度缓存。D3DCLEAR_TARGET,该方法用Color 参数(不
是材质颜色)中指定的RGBA 颜色值清除视区
Present()函数的参数可以全部设为NULL(空)。第一个参数是正在显示的原始矩形,如果不使用交换链,那么该值必须为NULL(空)。第二个
参数是一个指针,它指向要渲染的最终矩形。第三个参数是正在显示窗口的窗口句柄。另外由于没有用到交换链,所以对正在使用的窗口句
柄而言,该值设为NULL(空)。这个正在使用的窗口句柄是在Direct3D初始化过程中为D3DPRESENT_PARAMETERS对象设置的窗口句柄。
Present()函数中的最后一个参数是缓存区域,它代表需要更新的最小区域。同样,该参数涉及到交换链,也可以设为NULL(空)。
HRESULT DrawPrimitiveUP(
D3DPRIMITIVETYPE PrimitiveType, // 图元类型
UINT PrimitiveCount, // 图元数量
CONST void* pVertexStreamZeroData, // 保存要绘制的数据数组
UINT VertexStreamZeroStride // 顶点流大小,即每个顶点的大小
);
第一个参数是图元类型,D3DPT_POINTLIST等
HRESULT CreateVertexBuffer(
UINT Length, // 顶点缓存所需的字节数,即缓冲区的长度,一般使用sizeof()确定顶点的大小
DWORD Usage, // 描述顶点缓存的使用方法,一般设为0就可以了
DWORD FVF, // 描述使用顶点缓存的顶点结构,即灵活顶点格式
D3DPOOL Pool, // 放置资源的正确内存类
IDirect3DVertexBuffer9** ppVertexBuffer, // 返回该指针,之后对顶点缓冲进行的操作就是通过这个指针
HANDLE* pSharedHandle // 设为NULL就行了
);
Lock()函数将锁定一列数据,这样就可以处理该数据了。该函数的参数包括:为上锁的顶点缓存增加的偏移量(0代表锁定全部缓存)、要锁
定的数据量、指向锁定内存区域的指针以及一个指定锁存数据方法的标识符。
D3DFVF_XYZRHW x,y,z,rhw,其中rhw代表什么?
SetStreamSource()函数的参数包括要设置的流索引(从0到最大流数-1)、开始渲染缓存的偏移字节量和顶点跨度。顶点跨度指的是正在渲染
的缓存中,在几何图形中定义单个点时用到的顶点结构大小。
D3DSWAPEFFECT_DISCARD交换链方式
DrawPrimitive()函数将绘制出当前设置为流的顶点缓存内容。该函数的参数包括:要渲染的图元类型、开始渲染的起始顶点索引(开始为0)
以及要渲染的图元数目。
D3DXMatrixOrthoLH(
&g_ortho, // 保存正交矩阵的D3DXMATRIX对象
WINDOW_WIDTH, // 窗口分辨率的宽度
WINDOW_HEIGHT, // 窗口分辨率的高度
0.1f, // 最近点
1000.0f // 最远点
);
// 从视图空间(摄象机空间)到到屏幕的投影转换
g_D3DDevice->SetTransform(D3DTS_PROJECTION, &g_ortho);
使用了正交投影,则将(0,0)设置在屏幕中间
D3DTS_PROJECTION设置投影矩阵
D3DXMatrixPerspectiveFovLH()函数就可以设置左手立体投影。该函数的参数包括:该函数将要创建的D3DXMATRIX对象、Y方向(以弧度指定
)的可见区、视角幅度比(分辨率宽度与高度之比)以及远近剪切平面值。
D3DRS_CULLMODE 渲染状态设置剔除模式,它可以被设置为D3DCULL 枚举类
型的成员。默认情况下,Direct3D 把顶点逆时针排列的面作为背向面剔除。
使用世界矩阵会影响到设置该矩阵后要渲染的全部几何图形。如果想要移动世界矩阵,那么可以使用D3DXMatrixTranslation()。使用
D3DXMatrixRotation()可以旋转世界。同样使用D3DXMatrixRotationAxis()可以围绕任意轴旋转,使用D3DXMatrixRotationYawPitchRoll()
函数可以按照横倾、纵倾、横摆值旋转。
D3DXMatrixLookAtLH()函数可以设置视图矩阵。该函数的参数包括:将要转变为视图矩阵的矩阵、摄象机的位置、观察的位置以及向上的方
向。