初始化一个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格式那些进行测试和取得等等。。。。