1.3 基础

1.3.1表面

表面接口:     IDirect3DSurface9

获得表面信息:GetDesc(D3DSURFACE_DESC)

获得表面接口指针 :LockRect( D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect, DWORD Flags)

Un LockRect()

其中:D3DLOCKED_RECT {INT Pitch ;  void *pBits ;}

1.3.2  多重采样

D3DMULTISAMPLE_TYPE

{

D3D_MULTISAPLE_NONE

D3D_MULTISAMPLE_1....

}

使用函数IDirectX3D9::CheckDeviceMultiSampleType()检测

1.3.3 像素格式

D3DFORMAT

{

D3DFMT_R8G8B8

D3DFMT_X8R8G8B8

D3DFMT_A8R8G8B8

D3DFMT_A16B16G16R16F

D3DFMT_A32B32G32R32F

}

1.3.4内存池

D3DPOOL

{

D3DPOOL_DEFAULT

D3DPOOL_MANAGE

D3DPOOL_SYSTEMMEM

D3DPOOL_SCRATCH

}

1.3.5 交换链与页面置换

IDirect3dSwapChain9

1.3.6 深度缓存 z-buffer

判断像素的前后,D3DFMT_D32   D3DFMT_D24S8  D3DFMT_D24X8

1.3.6设备性能

D3DCAP9

1.4初始化过程

(1)获取IDirect3D9指针

IDirect3d9 * p =  Direct3DCreate9(D3D_SDK_VESION) ;

设备枚举,获得设备性能参数 以及创建显示接口

(2)检测设备性能

IDirect3D9::GetDeviceCaps(uint Adapter,D3DDETYPE DeviceType , D3DCAP9*pCaps)

(3)初始化D3DPRESENT_PARAMTERS参数

(4)创建IDirect3DDevic9

IDirect3d9::CreateDevice()

1.5 代码

注意:运行代码需要加入:d3d9.lib d3dx9.lib winmm.lib 库文件

// Step 1: Create the IDirect3D9 object.

IDirect3D9* d3d9 = 0;

    d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

    if( !d3d9 )

{

::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0);

return false;

}

// Step 2: Check for hardware vp.

D3DCAPS9 caps;

d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, deviceType, &caps);

int vp = 0;

if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )

vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;

else

vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.

D3DPRESENT_PARAMETERS d3dpp;

d3dpp.BackBufferWidth            = width;

d3dpp.BackBufferHeight           = height;

d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;

d3dpp.BackBufferCount            = 1;

d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;

d3dpp.MultiSampleQuality         = 0;

d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; 

d3dpp.hDeviceWindow              = hwnd;

d3dpp.Windowed                   = windowed;

d3dpp.EnableAutoDepthStencil     = true; 

d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;

d3dpp.Flags                      = 0;

d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;

d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;

// Step 4: Create the device.

hr = d3d9->CreateDevice(

D3DADAPTER_DEFAULT, // primary adapter

deviceType,         // device type

hwnd,               // window associated with device

vp,                 // vertex processing

   &d3dpp,             // present parameters

   device);            // return created device

if( FAILED(hr) )

{

// try again using a 16-bit depth buffer

d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

hr = d3d9->CreateDevice(

D3DADAPTER_DEFAULT,

deviceType,

hwnd,

vp,

&d3dpp,

device);

if( FAILED(hr) )

{

d3d9->Release(); // done with d3d9 object

::MessageBox(0, "CreateDevice() - FAILED", 0, 0);

return false;

}

}

d3d9->Release(); // done with d3d9 object

DirectX基础学习系列1的更多相关文章

  1. DirectX 基础学习系列5 纹理映射

    1 纹理坐标 类似BMP图像坐标系,左上为原点 纹理坐标为了规范化,范围限定在[0,1]之间,使用纹理的时候,需要修改顶点结构 struct ColorVetex { float x, y,z; fl ...

  2. DirectX基础学习系列8 渐进网格以及外接体

    1 IUnknown--> ID3DXBUFFER D3D泛型接口: GetBufferPointer Retrieves a pointer to the data in the buffer ...

  3. directX基础学习系列7 网格(自己创建)

    D3DXMesh 以及 D3DXPMesh都是从ID3DXBaseMesh类中集成,mesh基本是对三角单元进行操作 ID3DXBaseMesh主要函数: HRESULT DrawSubset( DW ...

  4. DirectX 基础学习系列6 字体

    DIRECTX9自带ID3DXFONT类 内部调用GDI的接口,效率一般,但能够处理一些复杂的字体 HRESULT D3DXCreateFontIndirect( LPDIRECT3DDEVICE9 ...

  5. DirectX基础学习系列5 融合技术

    7.1融合方程 1概念 融合技术将当前光栅化像素的颜色与以前已光栅化并处于同一个位置的像素颜色进行合成,即将当前要进行光栅化的三角形单元与已写入后台的像素进行融合 2需要遵循的原则: (1)先绘制不需 ...

  6. DirectX基础学习系列4 颜色和光照

    4.1颜色表示 RGB颜色:D3DCOLOR  可以用宏D3DCOLOR_ARGB(a,r,g,b)  D3DCOLOR_XRGB(255,r,g,b) 另外一种浮点表示:D3DCOLORVALUE, ...

  7. DirectX基础学习系列2

    补充第一章矩阵内容 向量 1 3D空间向量,包含浮点数类型坐标 D3DXVECTOR-->D3DXVECTOR3 2向量的长度 D3DXVector3Length(const D3DXVECTO ...

  8. Linux基础学习系列目录导航

    Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...

  9. Bootstrap基础学习 ---- 系列文章

    [Bootstrap基础学习]05 Bootstrap学习总结 [Bootstrap基础学习]04 Bootstrap的HTML和CSS编码规范 [Bootstrap基础学习]03 Bootstrap ...

随机推荐

  1. asp.net获取客户端IP方法(转载)

    最近web获取客户端ip,看到下面这篇文章,转载过来,一起分享(转载地址:http://www.cnblogs.com/yejun/archive/2008/02/26/1082485.html) 通 ...

  2. ytu 1938:首字母变大写(水题)

    首字母变大写 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 110  Solved: 43[Submit][Status][Web Board] Desc ...

  3. Java Hour 18 来个CURD吧 (三)

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为18 Hour,请各位不吝赐教. 依赖Jar 包管 ...

  4. Android JNI(转)

    JNI,全称Java Native Interface,是用于让运行在JVM中的Java代码和运行在JVM外的Native代码(主要是C或者C++)沟通的桥梁.代码编写者即可以使用JNI从Java的程 ...

  5. SQL Server2008跟SQL Server2008R2的区别(转)

    QL Server 2008 R2基于SQL Server 2008提供可靠高效的智能数据平台构建而成,SQL Server 2008 R2 提供了大量新改进,可帮助您的组织满怀信心地调整规模.提高 ...

  6. 《数据结构与算法分析》学习笔记(四)——栈ADT

    一.栈ADT是what? 1.定义 栈,是限制插入和删除都只能在一个位置上进行的表. 2.图示 3.栈的基本功能 (1)是否为空 (2)进栈 (3)出栈 (4)清空 (5)取栈顶 二.栈的链表实现 # ...

  7. Android R文件相关问题

        今天遇到的问题,gen下没有自动生成文件,而大部分java文件中错误是找不到R.java.“R cannot be resolved to a variable” 这就一定有别的原因造成错误, ...

  8. C#的GC机制(来自网摘复制,未整理)

    第一个就是很多人用.Net写程序,会谈到托管这个概念.那么.Net所指的资源托管到底是什么意思,是相对于所有资源,还是只限于某一方面资源?很多人对此不是很了解,其实.Net所指的托管只是针对内存这一个 ...

  9. Bean的前身今世&处理器&Aware

    出生: <bean>......</bean> 幼年:BeanDefinition  bean的接口定义 小学:GenericBeanDefinition  基础的bean映射 ...

  10. 简单几何(求交点) UVA 11437 Triangle Fun

    题目传送门 题意:三角形三等分点连线组成的三角形面积 分析:入门题,先求三等分点,再求交点,最后求面积.还可以用梅涅劳斯定理来做 /********************************** ...