在上一个三角形程序的基础上改了两个函数,具体如下:
HRESULT hero::Load()
{
VOID *pVertices;
WORD *pIndices;
MYVERTEX cVertices[]=
{
{1.0f,1.0f,-1.0f,0xffff0000,},
{1.0f,-1.0f,-1.0f,0xff00ff00,},
{-1.0f,-1.0f,-1.0f,0xff0000ff,},
{-1.0f,1.0f,-1.0f,0xffffffff,},
{-1.0f,1.0f,1.0f,0xffff0000,},
{-1.0f,-1.0f,1.0f,0xff00ff00,},
{1.0f,-1.0f,1.0f,0xff0000ff,},
{1.0f,1.0f,1.0f,0xffffffff,},
};
WORD cIndices[]=
{
0,1,2,0,2,3,
0,3,4,0,4,7,
4,5,6,4,6,7,
1,6,5,1,5,2,
3,2,5,3,5,4,
7,6,1,7,1,0
};
if(FAILED(m_pD3DDevice->CreateVertexBuffer(8*sizeof(MYVERTEX),0,MYFVF,D3DPOOL_DEFAULT,&m_pVB,NULL)))
return E_FAIL;
if(FAILED(m_pD3DDevice->CreateIndexBuffer(36*sizeof(WORD),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&m_pIB,NULL)))
return E_FAIL;
if(FAILED(m_pVB->Lock(0,sizeof(cVertices),(void **)&pVertices,0))) return E_FAIL;
memcpy(pVertices,cVertices,sizeof(cVertices));
m_pVB->Unlock();
if(FAILED(m_pIB->Lock(0,sizeof(cIndices),(void **)&pIndices,0))) return E_FAIL;
memcpy(pIndices,cIndices,sizeof(cIndices));
m_pIB->Unlock();
return S_OK;
}
HRESULT hero::Render()
{
if(m_pD3DDevice==NULL) return E_FAIL;
m_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
m_pD3DDevice->BeginScene();
m_pD3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
//世界变换
D3DXMATRIX matWorld;
UINT iTime=timeGetTime()%1000;
FLOAT fSpeed=iTime*D3DX_PI/1000.0f;
D3DXMatrixRotationY(&matWorld,fSpeed);
m_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld);
//观察变换
D3DXVECTOR3 vEye(0.0f,4.0f,-4.0f);
D3DXVECTOR3 vLook(0.0f,0.0f,0.0f);
D3DXVECTOR3 vUp(0.0f,1.0f,1.0f);
D3DXMATRIX matView;
D3DXMatrixLookAtLH(&matView,&vEye,&vLook,&vUp);
m_pD3DDevice->SetTransform(D3DTS_VIEW,&matView);
//投影变换
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/3,1.0f,0.5f,100.0f);
m_pD3DDevice->SetTransform(D3DTS_PROJECTION,&matProj);
m_pD3DDevice->SetStreamSource(0,m_pVB,0,sizeof(MYVERTEX));
m_pD3DDevice->SetFVF(MYFVF);
m_pD3DDevice->SetIndices(m_pIB);
m_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);
m_pD3DDevice->EndScene();
m_pD3DDevice->Present(NULL,NULL,NULL,NULL);
return S_OK;
}
效果如图:
程序下载地址(EXE):
http://www.brsbox.com/filebox/down/fc/33f6eb2bf77b93da7fa80ecb51c3e9f9