|
|

楼主 |
发表于 2005-8-23 11:45:00
|
显示全部楼层
Re:各位大虾:问个问题,D3DFVF_XYZRHW | D3DFVF_TEX1 的搭配画
经过验证: 我公司的破机器采用如下方式的index buffer 后依然不能显示背景。。。
郁闷阿。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
typedef struct sbackground
{
float x, y, z, rhw;
float u, v;
}sBackGroundVertex;
sBackGroundVertex g_BkGdVertex[] =
{
{ 0.0f, 0.0, 1.0, 1.0f, 0.0f, 0.0f },
{ 640.0f, 0.0, 1.0, 1.0f, 1.0f, 0.0f },
{ 0.0f, 480.0, 1.0, 1.0f, 0.0f, 1.0f },
{ 640.0f, 480.0, 1.0, 1.0f, 1.0f, 1.0f }
/*
{ 0.0f, 0.0, 1.0, 1.0f, 0.0f, 0.0f },
{ 640.0f, 0.0, 1.0, 1.0f, 1.0f, 0.0f },
{ 0.0f, 240.0f, 1.0f, 1.0f, 0.0f, 0.5f },*/
// { 640.0f, 240.0f, 1.0f, 1.0f, 1.0f, 0.5f },
// { 0.0f, 480.0, 1.0, 1.0f, 0.0f, 1.0f },
// { 640.0f, 480.0, 1.0, 1.0f, 1.0f, 1.0f }
};
short BackGroundIndexs [] =
{
0, 1, 2,
2, 1, 3
};
#define D3DFVF_BKGNDVERTEX D3DFVF_XYZRHW | D3DFVF_TEX1
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_WARE_VERTEXPROCESSING , &d3dpp, &g_pD3DDevice)))
return E_FAIL;
if(FAILED(g_pD3DDevice->CreateVertexBuffer(sizeof(g_BkGdVertex), 0, D3DFVF_BKGNDVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL)))
return E_FAIL;
VOID * pData;
if(FAILED(g_pVB->Lock(0, sizeof(g_BkGdVertex), &pData, 0)))
return E_FAIL;
memcpy(pData, g_BkGdVertex, sizeof(g_BkGdVertex));
g_pVB->Unlock();
HRESULT hr;
hr = g_pD3DDevice->CreateIndexBuffer(sizeof(BackGroundIndexs), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuffer, NULL);
VOID * pIndexData = NULL;
hr = g_pIndexBuffer->Lock(0, sizeof(BackGroundIndexs), &pIndexData, 0);
memcpy(pIndexData, BackGroundIndexs, sizeof(BackGroundIndexs));
hr = g_pIndexBuffer->Unlock();
hr = D3DXCreateTextureFromFileEx(g_pD3DDevice, "d:\\temp\\backdrop.bmp", D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, d3ddm.Format, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, NULL, NULL, &g_pTex);
HRESULT hr;
hr = g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0,0,64, 255), 1.0f, 0);
hr = g_pD3DDevice->BeginScene();
hr = g_pD3DDevice->SetStreamSource(0, g_pVB, 0, sizeof(sBackGroundVertex));
hr = g_pD3DDevice->SetTexture(0, g_pTex);
hr = g_pD3DDevice->SetFVF(D3DFVF_BKGNDVERTEX);
hr = g_pD3DDevice->SetIndices(g_pIndexBuffer);
hr = g_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, 0, 0, 4, 0, 2);
|
|