DirectX编程入门(结构超清晰)

3 篇文章 0 订阅
 

DirectX编程入门

2005-6-28 9:43:04   Count: <script src="/Click.asp?NewsID=0562809464715070"></script> 1201    转自: http://www.cpcwedu.com/Document/Classicstudy/094647276.htm

初始化一个D3D对象

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

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

if(NULL == (d3d=Direct3DCreate9(D3D_SDK_VERSION)))
{
  MessageBox(NULL,"建立Direct3D对象失败","信息",MB_OK);
  return 0;
}

d3d->Release();
return 0;
}

说明:
LPDIRECT3D9 d3d = NULL; 声明一个Direct3D对象.将它的初始值设为0.然后通过Direct3DCreate9函数建立起这个Direct3D对象.D3D_SDK_VERSION是版本的检查。

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

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

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

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

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

if(NULL == (d3d=Direct3DCreate9(D3D_SDK_VERSION)))  
{
  MessageBox(NULL,"建立Direct3D对象失败","信息",MB_OK);
  return 0;
}

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

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

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

#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)
{
LPDIRECT3D9  d3d = NULL;
D3DDISPLAYMODE d3ddm;
if(NULL == (d3d = Direct3DCreate9(D3D_SDK_VERSION)))
{
  MessageBox(NULL,"建立Direct3D对象失败","信息",MB_OK);
  return 0;
}

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

wsprintf(buff,"你好,关于你的显示器信息如下/n/n  分辨率是 %dX%d/n  刷新率是 %d/n  D3DFOAT值为 %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)
{
IDirect3D9* d3d = NULL;
if(NULL == (d3d = Direct3DCreate9(D3D_SDK_VERSION)))
{
  MessageBox(NULL,"Direct3DCreate9时失败","信息",MB_OK);
  return 0;
}

if(d3d->CheckDepthStencilMatch(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DFMT_R5G6B5,D3DFMT_R5G6B5,D3DFMT_D16) != D3D_OK)
{
  MessageBox(NULL,"你的深度缓冲不支持你指定的格式","信息",MB_OK);
  return 0;
}

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


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

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值