DirectX终极开发指南学习笔记(一)

本来是写在文本文档里的,但查找起来不方便,看起来太累。

 

第一章

    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()函数可以设置视图矩阵。该函数的参数包括:将要转变为视图矩阵的矩阵、摄象机的位置、观察的位置以及向上的方

向。

你可能感兴趣的:(DirectX学习)