|
|
您好
我初学MFC,并想让其与Direct9相结合。
今天我尝试了一次,失败了,非常沮丧……
所以请教帮我指出错误.
程序思路是在创造主窗口之后初始化Direct3D对像和设备, 并将窗口背景渲染成蓝色。
以下是程序的主要片断.
// rack.cpp
.....
.....
// 这个程序的主窗口类rackMainWnd及构造函数
rackMainWnd::rackMainWnd()
{
Create( NULL, _T("The rack Application for Direct3D9"));
BOOL res;
if( !( res = InitDirect3D() ) ){
::AfxMessageBox( "Direct3D initalized faild" );
return;
}
while( !m_quit) // 一直渲染直到按下光标左键, m_quit记录鼠标左键被按下
Render();
}
BOOL rackMainWnd::InitDirect3D()
{
pD3D = NULL; // 这是3D对像和设备, 之前在窗口类中申明
pD3DDEVICE = NULL;
// 创建对象, 并且检查是否成功
if( NULL == ( pD3D = Direct3DCreate9(D3D_SDK_VERSION) ) )
return FALSE;
// 填充3D设备结构参数
D3DPRESENT_PARAMETERS d3dpp;
::ZeroMemory( &d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = 640;
d3dpp.BackBufferHeight = 480;
d3dpp.hDeviceWindow = this->GetSafeHwnd(); // 我不知道是不是这里出问题了[em23]
//====================
// rackMainWnd是从CFrameWnd派生的一个窗口类, 与普通的WIN32创造的窗口 在外观上的唯一区别是,它具有凹陷边框, 其他是一样的. 使用这个窗口类的句柄合不合适还没有验证过. 所以我只是怀疑.
// 创建设备
if( !( pD3D ->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_REF,
this ->GetSafeHwnd(),
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&pD3DDEVICE ) ) )
return FALSE;
return TRUE;
}
// 渲染函数
void rackMainWnd::Render()
{
if( NULL == pD3DDEVICE)
return;
// 清除窗口内容, 并画成蓝色的背景
pD3DDEVICE ->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0);
// 呈现
pD3DDEVICE -> resent( NULL, NULL, NULL, NULL);
}
运行环境, winxp Direct 9.0c , Direct SDK 9, Visual Studio.net 2003.
到目前为, 程序运行状态是顺利的, 只是我却没有看到呈现出来的蓝色背景, 非常的郁闷.[em15]
到底是什么原因呢?
请教高手帮我分析, 指出不足和问题所在. 小弟先有礼了!
另外,最新的情况在 8 楼 |
|