早教吧 育儿知识 作业答案 考试题库 百科 知识分享

Direct3D创建顶点缓存HRESULTInitDirect3D(HWNDhWnd){\x05/*创建Direct3D接口*/\x05LPDIRECT3D9pd3d=NULL;\x05if(NULL==(pd3d=Direct3DCreate9(D3DSDKVERSION)))\x05\x05returnEFAIL;\x05/*创建Direct3D设备接口*/\x05D3DPRESENTPARAMETE

题目详情
Direct3D创建顶点缓存
HRESULT InitDirect3D(HWND hWnd)
{
\x05/*创建Direct3D接口*/
\x05LPDIRECT3D9 pd3d = NULL;
\x05if(NULL == (pd3d = Direct3DCreate9(D3D_SDK_VERSION)))
\x05\x05return E_FAIL;
\x05/*创建Direct3D设备接口*/
\x05D3DPRESENT_PARAMETERS d3dpp;
\x05ZeroMemory(&d3dpp,sizeof(d3dpp));
\x05d3dpp.Windowed = true;
\x05d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
\x05if(FAILED(pd3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
\x05\x05return E_FAIL;
\x05pd3d->Release();
\x05return S_OK;
}
HRESULT InitVertexBuf()
{
\x05CUSTOMVERTEX vertices[] ={...};
\x05if(FAILED(g_pd3dDevice->CreateVertexBuffer(8*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pVertexBuf,NULL)))
\x05\x05return E_FAIL;
\x05VOID* pVertices;
\x05g_pVertexBuf->Lock(0,sizeof(vertices),(void**)&pVertices,0);
\x05memcpy(pVertices,vertices,sizeof(vertices));
\x05g_pVertexBuf->Unlock();
\x05return S_OK;
}
HRESULT InitIndexBuf()
{
\x05if(FAILED(g_pd3dDevice->CreateIndexBuffer(36*sizeof(WORD),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&g_pIndexBuf,NULL)))
\x05\x05return E_FAIL;
\x05WORD* pIndices = NULL;
\x05g_pIndexBuf->Lock(0,0,(void**)&pIndices,0);
\x05g_pIndexBuf->Unlock();
\x05return S_OK;
}
VOID Direct3DRender()
{
\x05g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET/*|D3DCLEAR_ZBUFFER*/,D3DCOLOR_XRGB(0,0,0),1.0f,0);
\x05g_pd3dDevice->BeginScene();
\x05/*设置世界变幻矩阵*/
\x05D3DXMATRIX matWorld,Rx,Ry,Rz;
\x05D3DXMatrixIdentity(&matWorld);\x05//得到单位矩阵
\x05D3DXMatrixRotationX(&Rx,::timeGetTime()/1000.0f);\x05//让物体沿X轴旋转
\x05D3DXMatrixRotationY(&Ry,::timeGetTime()/1000.0f);\x05//让物体沿Y轴旋转
\x05D3DXMatrixRotationZ(&Rz,::timeGetTime()/1000.0f);\x05//让物体沿Z轴旋转
\x05matWorld = Rx*Ry*Rz*matWorld;\x05//得到变换矩阵(包含以上三种)
\x05g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld);
\x05/*设置取景变幻矩阵*/
\x05D3DXMATRIX matView;
\x05D3DXVECTOR3 vEye(0.0f,0.0f,-30.0f);
\x05D3DXVECTOR3 vAt(0.0f,0.0f,0.0f);
\x05D3DXVECTOR3 vUp(0.0f,1.0f,0.0f);
\x05D3DXMatrixLookAtLH(&matView,&vEye,&vAt,&vUp);
\x05g_pd3dDevice->SetTransform(D3DTS_VIEW,&matView);
\x05/*设置投影变幻矩阵*/
\x05D3DXMATRIX matProj;
\x05D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4.0f,1.0f,1.0f,1000.0f);
\x05g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj);
\x05/*设置渲染状态*/
\x05g_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
\x05g_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
\x05/*设置显示窗口位置及大小*/
\x05//D3DVIEWPORT9 vp = {100,100,200,200,0,1};
\x05//g_pd3dDevice->SetViewport(&vp);
\x05/*渲染三角形*/
\x05g_pd3dDevice->SetStreamSource(0,g_pVertexBuf,0,sizeof(CUSTOMVERTEX));
\x05g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
\x05g_pd3dDevice->SetIndices(g_pIndexBuf);
\x05g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);
\x05g_pd3dDevice->EndScene();
\x05g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}
▼优质解答
答案和解析
问题应该解决了吧?我也正在找这种方法.已经发久了,无果.direct3D中初始化的时候 要用到一个窗口的句柄 比如你所提到的 图片控件