DirectX Program - Init DX9

初始化一个D3D对象

#include <d3d9.h>
#pragma comment(lib,"d3d9.lib")

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
LPDIRECT 3D9 d3d = NULL;

if(NULL == (d3d=Direct 3DCreate9(D 3D_SDK_VERSION)))
{
  MessageBox(NULL,"建立Direct 3D对象失败","信息",MB_OK);
  return 0;
}

d3d->Release();
return 0;
}

说明:
LPDIRECT 3D9 d3d = NULL; 声明一个Direct 3D对象.将它的初始值设为0.然后通过Direct 3DCreate9函数建立起这个Direct 3D对象.D 3D_SDK_VERSION是版本的检查。

d3d->Release();将对象释放。

其实这个程序什么也没有做。只是演示如何建立和释放一个Direct 3D对象。
-------------------------------------------------------------
取得显卡数

上一篇讲了如何初始化一个Direct 3D对象.初始化一个d3d对象之后,我们就可以用Direct 3D的IDirect 3D接口了.
在IDirect 3D接口里有许多方法可以调用.比如用GetAdapterCount()可以得到显卡数.代码如下:

#include <d3d9.h>
#pragma comment(lib,"d3d9.lib")

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
LPDIRECT 3D9 d3d = NULL;  
char buff[255];
UINT num;

if(NULL == (d3d=Direct 3DCreate9(D 3D_SDK_VERSION)))  
{
  MessageBox(NULL,"建立Direct 3D对象失败","信息",MB_OK);
  return 0;
}

num = d3d->GetAdapterCount();
wsprintf(buff,"你有%d块显卡",num);
MessageBox(NULL,buff,"信息",MB_OK);
d3d->Release();
return 0;
}

说明:
程序中用wsprintf函数可以把数字转换成字符,然后用MessageBox显示.程序的最后仍用Release()来释放d3d对象.
-------------------------------------------------------------
取显示器的信息

用IDirect 3D的GetAdapterDisplayMode方法可以取得显示器的一些信息.通过指向一个D 3DDISPLAYMODE结构的指针来取得这些信息.下面程序演示这个功能.

#include <d3d9.h>
#include <stdio.h>
#pragma comment(lib,"d3d9.lib")

char buff [255];
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
LPDIRECT 3D9  d3d = NULL;
D 3DDISPLAYMODE d3ddm;
if(NULL == (d3d = Direct 3DCreate9(D 3D_SDK_VERSION)))
{
  MessageBox(NULL,"建立Direct 3D对象失败","信息",MB_OK);
  return 0;
}

if(FAILED(d3d->GetAdapterDisplayMode(D 3DADAPTER_DEFAULT,&d3ddm)))
{
  MessageBox(NULL,"GetAdapterDisplayMode时失败","信息",MB_OK);
  return 0;
}

wsprintf(buff,"你好,关于你的显示器信息如下/n/n  分辨率是 %dX%d/n  刷新率是 %d/n  D 3DFOAT值为 %d",d3ddm.Width,d3ddm.Height,d3ddm.RefreshRate,d3ddm.Format);
MessageBox(NULL,buff,"信息",MB_OK);
return 0;
}

-------------------------------------------------------------
CheckDepthStencilMatch方法

CheckDepthStencilMatch方法是检查配适器(显卡)是否支持你指定的d3d格式.通俗点讲就是比如是否支持32位真彩色等的检查了.DepthStencilMatch我们可以简单的翻译成"深度缓冲"吧,示例代码如下:

#include <d3d9.h>
#pragma comment(lib,"d3d9.lib")

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
IDirect 3D9* d3d = NULL;
if(NULL == (d3d = Direct 3DCreate9(D 3D_SDK_VERSION)))
{
  MessageBox(NULL,"Direct 3DCreate9时失败","信息",MB_OK);
  return 0;
}

if(d3d->CheckDepthStencilMatch(D 3DADAPTER_DEFAULT,D 3DDEVTYPE_HAL,D 3DFMT_R5G6B5,D 3DFMT_R5G6B5,D 3DFMT_D16) != D 3D_OK)
{
  MessageBox(NULL,"你的深度缓冲不支持你指定的格式","信息",MB_OK);
  return 0;
}

MessageBox(NULL,"很好,你的显卡支持你指定的D 3D格式","信息",MB_OK);
d3d->Release();
return 0;
}


其中D 3DFMT_R5G6B5这个数值是从上个例子中用GetAdapterDisplayMode方法得到的,是我的显卡的格式,也许你的显卡和我的不一样,你可以用GetAdapterDisplayMode取得自己的显卡信息。具体的可以看MSDN。关于CheckDepthStencilMatch方法的具体参数也可以看MSND。我写这个贴子只是用最简单的方法来举例下Direct 3D里的方法调用,给初学者能够入门,具体讲深了我也讲不清。呵。:)
今天看了下Opengl,感觉比用DirectX入门简单了一些。不过我想你如果学学在DirectX上开发去学那个也应该很简单的。Direct 3D里的内容很多也很复杂。我们现在学的只是建立了一个IDirect 3D接口,调用一下IDirect 3D接口上的方法,还没有到真正用它“作简单的三维图”。

IDirect 3D9接口主要作用就是建立基本的3d环境和对显卡的显能, 3D格式那些进行测试和取得等等。。。。

你可能感兴趣的:(测试,null,Direct3D,winapi)