这一节课,我们要做一个D3D的开发环境出来,基于VC++6.0/DirectX9
我们需要的头文件和库文件d3d9.h 与d3d9.lib
首先,开发之前,我们要了解两个东西(具体意义,参考SDK帮助文件)
IDirect3D9* pIDirect3D9;//D3D接口对象
IDirect3DDevice9* pIDirect3DDevice9;//D3D设备
我们创建D3D开发环境的目的,就是要把上面这两个东西创建出来。
以后的开发中,pIDirect3DDevice9到处都用得到。
创建D3D设备创建的步骤:
步骤1:创建接口对象
步骤2:显示属性的设置
步骤3:设备功能检测
步骤4:创建D3D设备
分析:
步骤2显示属性的设置,全屏模式和窗口模式有差别,要分别处理
步骤3我们采用HAL硬件抽象层。进行检测选择,选择硬件,软件渲染的方式
步骤2和步3为步骤4 D3D设备的创建做准备
流程如下:
pIDirect3D9=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODe d3ddm;
pIDirect3D9->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
If(bFullScreen)
{
//填充d3dpp结构体(具体细节参考SDK帮助)
}
else
{
//填充d3dpp结构体(具体细节参考SDK帮助)
}
pIDirect3D9->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&d3dcaps)
if(d3dcaps.DevCaps&实际功能)
{
bHardware=true;
}
else
{
bHardware=false;
}
If(bHardware)
{
pIDirect3D9->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&pIDirect3DDevice9);
}
else
{
pIDirect3D9->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&pIDirect3DDevice9);
}
到此,我们需要的两个东西D3D接口对象和D3D设备就都创建出来了,我们的D3D场景初始化也完成了
谁都知道,重复的代码谁都不喜欢写,因为那费时又有点无聊,呵呵,为了方便以后我们开发的使用,我们对D3D的初始化同样做了封装,上面的讲的所有的功能细节,都有我们的类去完成,你只要调用时设定几个参数,一切就OK了。
最后,你以后只需要写下面几行代码,就可以完成D3D设备的初始化,并创建出一个你想要的窗口。
CEngineApp EngineApp;
CEngineFrame EngineFrame;
EngineApp.CreateWnd("Lesson2",hInstance,nShowCmd);
EngineFrame.CreateD3DFrame(EngineApp.GetWndHwnd(),800,600,false);
如果你想要一个全屏的窗口,只要把最后一行的false改为true就可以了,细节的东西,就交给我们的类去实现了
是不是很简单
我们CEngineFrame类功能很强大的,我们后边会一步步填加一些功能,去完善它!
效果预览
呵呵,效果看起来和第一课一样,但这个窗口已经是D3D初始化后的窗口了,在这个窗口中,你可以创造出很奇妙的东西,我们慢慢来,不着急!
今天是周末,快十点了,要休息一下了,过我的私生活……
明天有时间,我们继续下一课,开始做图了哦,顶点渲染,到时候你会看到用D3D做出来的空间图形!
如果您要使用我写的东西,我很高兴请写明出处就可以,也尊重一下作者的劳动成果嘛
您愿意使用我的引擎代码,可以联系我,我发给您。
如果您对引擎的修改有建议,通知我,我很高兴!