|
我用DIRECT9 SDK做的,程序可以成功运行,可以显示背景色,但不能显示出
三角形,D8和D9有些函数不太一样!
void CD3DWnd::InitD3D()
{
// m_pD3D=Direct3DCreate8( D3D_SDK_VERSION )
m_pD3D=Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=true;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;
if(FAILED(m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
m_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,&m_pDevice)))
{
}
m_pDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
}
void CD3DWnd::Render()
{
if(m_pDevice!=NULL){
m_pDevice->Clear(
0,NULL,D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255),
1.0f,0);
m_pDevice->BeginScene();
//code
this->SetupMatrices();
m_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
m_pDevice->SetStreamSource( 0, m_pVB, 0,sizeof(CUSTOMVERTEX) );
m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );
m_pDevice->EndScene();
m_pDevice-> resent(NULL,NULL,NULL,NULL);
}
}
int CD3DWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
this->InitD3D();
this->InitGeometry();
m_nRotateY=0;
SetTimer(1,50,NULL);
return 0;
}
void CD3DWnd::InitGeometry()
{
CUSTOMVERTEX vertices[]={
{-1.0f,-1.0f,0.0f,D3DCOLOR_XRGB(0,0,0)},
{0.0f,1.0f,0.0f,D3DCOLOR_XRGB(0,255,0)},
{1.0f,-1.0f,0.0f,D3DCOLOR_XRGB(255,255,0)}
};
m_pDevice->CreateVertexBuffer(
sizeof(vertices),
0,D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,&m_pVB,NULL);
void *pVertices;
m_pVB->Lock(0,sizeof(vertices),(void**)&pVertices,0);
memcpy(pVertices,vertices,sizeof(vertices));
m_pVB->Unlock();
}
void CD3DWnd::SetupMatrices()
{
float angle=m_nRotateY*D3DX_PI/180;
D3DMATRIX matWorld;
D3DXMatrixRotationY(&(D3DXMATRIX)matWorld,angle);
m_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
D3DXVECTOR3 eye(0.0f,3.0f,-5.0f);
D3DXVECTOR3 lookat(0.0f,0.0f,0.0f);
D3DXVECTOR3 up(0.0f,1.0f,0.0f);
D3DMATRIX matView;
D3DXMatrixLookAtLH(&(D3DXMATRIX)matView,&eye,&lookat,&up);
m_pDevice->SetTransform(D3DTS_VIEW,&matView);
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
m_pDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}
void CD3DWnd::OnTimer(UINT nIDEvent)
{
this->Render();
m_nRotateY+=2;
//::AfxMessageBox("asdfasdf");
CWnd::OnTimer(nIDEvent);
}
|
|