本文共 1551 字,大约阅读时间需要 5 分钟。
VOID onCreateD3D() { g_pD3D = Direct3DCreate9(D3D_SDK_VERSION); if (!g_pD3D) { return; } D3DDISPLAYMODE d3ddm; ZeroMemory(&d3ddm, sizeof(d3ddm)); g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm); D3DPRESENT_PARAMETERS d3dapp; ZeroMemory(&d3dapp, sizeof(d3dapp)); d3dapp.Windowed = FALSE; d3dapp.BackBufferHeight = d3ddm.Height; d3dapp.BackBufferWidth = d3ddm.Width; d3dapp.BackBufferCount = 1; //d3dapp.BackBufferFormat = d3ddm.Format; d3dapp.AutoDepthStencilFormat = D3DFMT_D16; d3dapp.EnableAutoDepthStencil = true; d3dapp.SwapEffect = D3DSWAPEFFECT_DISCARD; g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dapp, &g_p3dDevice); if (!g_p3dDevice) { return; } g_p3dDevice->SetRenderState(D3DRS_ZENABLE, true); g_p3dDevice->SetRenderState(D3DRS_LIGHTING, false); g_p3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); g_p3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);}
VOID onInit()
{ onCreateD3D(); D3DXMATRIX matView, matProj; D3DXMatrixIdentity(&matView); D3DXMatrixIdentity(&matProj); D3DXVECTOR3 vEyes(0.0f,3.0f,-10.0f); D3DXVECTOR3 vLookAt(0.0f,0.0f,0.0f); D3DXVECTOR3 vUp(0.0f,1.0f,0.0f); D3DXMatrixLookAtLH(&matView, &vEyes, &vLookAt, &vUp); g_p3dDevice->SetTransform(D3DTS_VIEW, &matView); D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 3, 16.0f/ 9.0f, 1.0f, 5000.0f); g_p3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); }出现观察矩阵设置异常的原因是忘记了在初始化时给D3DPRESENT_PARAMETERS的BackBufferFormat 设置参数,去掉第一句标红的注释符号就行了
0xC0000005错误的根本原因是:忘记初始化或者指定的数据所占内存大小大于该数据类型,即所谓的内存溢出
转载地址:http://ukuubk.baihongyu.com/