WEB开发网
开发学院软件开发VC MFC架构下的DirectX8 阅读

MFC架构下的DirectX8

 2010-05-25 20:36:05 来源:WEB开发网   
核心提示:这个函数有六个参数,幸运的是没有一个是很复杂的,MFC架构下的DirectX8(3),D3DADAPTER_DEFAULT告诉Direct3D使用主显示器,只有当你使用多显示器时才是必须的,如果你运行程序,你将得到一个绿色背景的窗口,你可以使用一个数值来指定另外一个显示器,调用IDirect3D的GetAdapterC

这个函数有六个参数,幸运的是没有一个是很复杂的。D3DADAPTER_DEFAULT告诉Direct3D使用主显示器,只有当你使用多显示器时才是必须的。你可以使用一个数值来指定另外一个显示器。调用IDirect3D的GetAdapterCount将返回系统的适配器数目。

第二个参数,D3DDEVTYPE_HAL,告诉Direct3D使用硬件加速。其它选项包括D3DDEVTYPE_REF 和 D3DDEVTYPE_SW,通常你都会希望使用硬件加速的,但有时侯你可能会使用软件加速进行测试。

指定窗口取得焦点。如果是全屏应用程序,你需要一个最顶层窗口。

D3DCREATE_SOFTWARE_VERTEXPROCESSING指定顶点处理类型。你也可以使用硬件加速或是联合类型,我不使用硬件加速为的是广泛的兼容性。如果你想支持T&L,则你必须使用硬件加速。

最后两个参数很简单,一个是你以前建立的,而pID3Ddevice是你现在要创建的IDirect3DDevice8接口。如果方法返回D3DERR_NOTAVAILABLE,则你写的参数是正确的,但你的设备不支持你指定的参数。

最完美的是这个方法自动为你创建后台缓冲(back buffers)和深度缓冲(depth buffers)。剪裁(Clipping)作为后台表面(backface culling)被自动激活。灯光也被自动激活了,直到你定义顶点颜色之前,你可以禁止使用灯光:

pID3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

DrawScene()函数:

HRESULT CFrameWin::DrawScene()
{
HRESULT hr;
do
{
// clear back buffer
hr = pID3DDevice->Clear(0,
NULL,
D3DCLEAR_TARGET,
D3DCOLOR_RGBA(0,63,0,0),
0,
0);
if(FAILED(hr))
break;
// start drawing
hr = pID3DDevice->BeginScene();
if(FAILED(hr))
break;
// Put all drawing code here
hr = pID3DDevice->EndScene();
if(FAILED(hr))
break;
// flip back buffer to front
hr = pID3DDevice->Present(NULL, NULL, NULL, NULL);
} while(0);
return hr;
}

Clear会填充你指定的缓冲区。你可以填充Z缓冲区、后台缓冲区或摸板缓冲区(stencil buffer)。在这个例子中你将用绿色填充后台缓冲区。所以,我们设定D3DCLEAR_TARGET标志和绿色。

在本例中BeginScene和EndScene并没有做什么,但在以后的例子中我们会用到它的。这两个函数是画图元时的例行公事代码,

这个函数不断的翻转后台表面。我们可以不断的在后台表面画一些东西,然后把后台表面翻转到前台表面。

ShutdownDirect3D()函数

void CFrameWin::ShutdownDirect3D()
{
HELPER_RELEASE(pTexture);
HELPER_RELEASE(pIndexBuffer);
HELPER_RELEASE(pStreamData);
HELPER_RELEASE(pID3DDevice);
HELPER_RELEASE(pID3D);
}

ShutdownDirect3D释放所有的接口。将来你可能要加入额外的代码来关闭Direct3D接口,但现在已经够了。如果你运行程序,你将得到一个绿色背景的窗口。你可以按“ESC”键来退出应用程序。

上一页  1 2 3 4 5 6  下一页

Tags:MFC 架构 DirectX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接