早教吧作业答案频道 -->其他-->
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);
}
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中初始化的时候 要用到一个窗口的句柄 比如你所提到的 图片控件
看了Direct3D创建顶点缓存H...的网友还看了以下:
●考查下列文法:G(V T,V N,E,P)其中:V T={+,*,(,),i}V N={E,T,F 2020-05-25 …
考查下列文法:C(VT,VN,E,P) 其中:VT={+,*,(,),i} VN={E,T,F} E 2020-05-26 …
考察下列文法:G(VT,VN,E,P) 其中:VT={+,*,(,),i} VN={E,T,F} E 2020-05-26 …
考查文法:G(VT,VN,E,P) 其中,VT={+,*,(,),i},VN={E,T,F},E为开 2020-05-26 …
英语单词填空1.时间状语:d-r-n-2.场所:b-s-s-o-f-r--e-a-t-e-t3.教 2020-07-14 …
下列可以正确表示字符型常数的是A)”a”B)’\t’C)”\n”D)297求详解下列可以正确表示字 2020-07-19 …
这个微分方程怎么解!r(t)^2+3r(t)^1+2r(t)=e(t)^2+2e(t)^1+e(t 2020-07-23 …
关於e(x)常微分方程的问题dx(t)/dt=exp(x(t))如何求x(t)之前有试过,dx/d 2020-07-23 …
写单词,这些单词打乱顺序了!:1.d,f,e,n,i,f,e,r,t,()2.g,h,o,e,t, 2020-07-26 …
在实际生产中冷端温度往往不为零摄氏度,而是某一温度t1,实际设备的温度为t,则测得热电势为()a: 2020-07-29 …