|
各位大神好,我是在是利用MFC多文档+D3D做一个地图编辑器。
在窗口OnSize被触发时,找回设别
HRESULT hr = g_pd3dDevice->TestCooperativeLevel() ;
if (SUCCEEDED(hr) || hr == D3DERR_DEVICENOTRESET)
{
d3dpp.BackBufferHeight = height;
d3dpp.BackBufferWidth = width;
g_pd3dDevice->Reset(&d3dpp);
D3DXMATRIX matView;
g_camera.getViewMatrix(&matView);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
g_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);
D3DVIEWPORT9 viewPort = { 0, 0, width, height, 0.0f, 1.0f };
g_pd3dDevice->SetViewport(&viewPort);
D3DXMATRIX perspection;
D3DXMatrixPerspectiveFovLH( &perspection, D3DX_PI * 0.25f , (float)width / (float)height,1.0f,1000.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &perspection);
}
else
{
const char* errorString = DXGetErrorString(hr) ;
DXTRACE_ERR_MSGBOX(errorString, hr) ;
}
然后还在OnSize中
重新初始化一次地形(注:CTerrain* g_terrain;//地图;已在头文件中定义)
g_terrain = new CTerrain(g_D3DInit->GetD3DDevice())
g_terrain->init(TERRAIN_ROWS, TERRAIN_COLS, 20.0f, 20.0f, 3.0f, 0.0f);
CTerrain类说明
头文件中定义
//地图定点缓冲区;
LPDIRECT3DVERTEXBUFFER9 m_VertexBuffer;//顶点缓冲区句柄
LPDIRECT3DINDEXBUFFER9 m_IndexBuffer;//索引缓冲区句柄
TRRAIN_VERTEX* m_TerrainVertex;//自定义顶点格式
CPP文件中
void init(int colVertexNum,int rowVertexNum,float cellSpace,float scalar,float heightScale,float offsetHeight);
这个函数中调用m_PD3DDevice->CreateVertexBuffer();不能重新创建定点缓冲区了
程序开始运行时是正常的,但是更改大小的时候上面的情况就产生了。创建顶点缓冲区的时候我用的是D3DPOOL_MANAGED。
各位大神帮忙解答一下呗~~ [em10] |
|