首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

D3D渲染图形为什么变成黑色?解决方案

2012-03-21 
D3D渲染图形为什么变成黑色?HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DS

D3D渲染图形为什么变成黑色?
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext )
{
// Initialize three vertices for rendering a triangle
  CUSTOMVERTEX g_Vertices[] =
  {
  { -1.0f,-1.0f, 0.0f, 0xffff0000, },
  { 1.0f,-1.0f, 0.0f, 0xff0000ff, },
  { 0.0f, 1.0f, 0.0f, 0xffffffff, },
  };

  // Create the vertex buffer.
  if( FAILED( pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
  0, D3DFVF_CUSTOMVERTEX,
  D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
  {
  return E_FAIL;
  }

  // Fill the vertex buffer.
  VOID* pVertices;
  if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 ) ) )
  return E_FAIL;
  memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
  g_pVB->Unlock();
  return S_OK;
}
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
  HRESULT hr;

  V( pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );
  if( SUCCEEDED( pd3dDevice->BeginScene() ) )
  {
  D3DXMATRIXA16 matWorld;
  UINT iTime = timeGetTime() % 1000;
  FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
  D3DXMatrixRotationY( &matWorld, fAngle );
  pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
  D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
  D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
  D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
  D3DXMATRIXA16 matView;
  D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
  pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
  D3DXMATRIXA16 matProj;
  D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
  pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
  pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
  pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
  pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );

  V( pd3dDevice->EndScene() );
  }
}

[解决办法]
加一句这个:pd3dDevice->LightEnable( 0, FALSE);

 VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();
pd3dDevice->LightEnable( 0, FALSE);//这里,把光照关掉

return S_OK;

热点排行