|
小弟初学D3D,就遇上此问题,苦思一天不的其解,来此求救高人!
附上代码:
#include "Box.h"
CBox::CBox()
{
m_pD3DDevice = NULL;
m_pVertexBuffer = NULL;
m_pTexture = NULL;
g_time = 0;
}
CBox::~CBox()
{
SafeRelease(m_pD3DDevice);
SafeRelease(m_pVertexBuffer);
}
DWORD CBox::Render()
{
static FLOAT fTexTimeKey = 0;
FLOAT fAppTime = timeGetTime();
if( fAppTime - g_time > 10)
{
g_time = timeGetTime();
fTexTimeKey += 0.1f;
}
if( fTexTimeKey > 160.0f )
{
fTexTimeKey = 0.0f;
}
FLOAT tu = (fTexTimeKey/99)-(FLOAT)floor(fTexTimeKey/99);
BOX_CUSTOMVERTEX02* pVertices;
m_pVertexBuffer->Lock( 0, 0, (BYTE**)&pVertices, 0 );
for( int ii=0; ii<(WALL_VERT_NUM/2); ii++ )
{
pVertices[2*ii+0].tu = tu+ii;
pVertices[2*ii+1].tu = tu+ii;
}
for( ii=0; ii<WALL_VERT_NUM; ii++ )
pVertices[ii].color = 0xffffffff;
m_pVertexBuffer->Unlock();
m_pD3DDevice->SetTexture( 0, m_pTexture );
m_pD3DDevice->SetStreamSource( 0, m_pVertexBuffer, sizeof(BOX_CUSTOMVERTEX02) );
m_pD3DDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX02 );
m_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 8);
return 8;
}
HRESULT CBox::CreateVertexBuffer()
{
if(FAILED(m_pD3DDevice->CreateVertexBuffer(WALL_VERT_NUM* sizeof(BOX_CUSTOMVERTEX02),
0, D3DFVF_CUSTOMVERTEX02,
D3DPOOL_DEFAULT, &m_pVertexBuffer)))
{
return E_FAIL;
}
return S_OK;
}
bool CBox::UpdateVertices()
{
VOID* pVertices;
BOX_CUSTOMVERTEX02 cvVertices[] =
{
{ -50.0f,-20.0f, 50.0f, 0xfffffff, 0.00f, 1.0f },
{ -50.0f, 100.0f, 50.0f, 0xfffffff, 0.00f, 0.0f },
{ 50.0f,-20.0f, 50.0f, 0xfffffff, 1.00f, 1.0f },
{ 50.0f, 100.0f, 50.0f, 0xfffffff, 1.00f, 0.0f },
{ 50.0f,-20.0f,-50.0f, 0xfffffff, 2.00f, 1.0f },
{ 50.0f, 100.0f,-50.0f, 0xfffffff, 2.00f, 0.0f },
{ -50.0f,-20.0f,-50.0f, 0xfffffff, 3.00f, 1.0f },
{ -50.0f, 100.0f,-50.0f, 0xfffffff, 3.00f, 0.0f },
{ -50.0f,-20.0f, 50.0f, 0xfffffff, 4.00f, 1.0f },
{ -50.0f, 100.0f, 50.0f, 0xfffffff, 4.00f, 0.0f },
};
if(FAILED(m_pVertexBuffer->Lock(0, sizeof(cvVertices), (BYTE**)&pVertices, 0)))
{
return false;
}
memcpy(pVertices, cvVertices, sizeof(cvVertices));
m_pVertexBuffer->Unlock();
return true;
}
bool CBox::SetTexture(const char *szTextureFilePath)
{
if(FAILED(D3DXCreateTextureFromFile(m_pD3DDevice, "Sky.bmp", &m_pTexture)))
{
return false;
}
return true;
}
我在 主程序中是这样掉用的,不知道哪里错了
m_pSky = new CSkyBox();
m_pSky->SetTexture("Sky.bmp");
下面是完整的程序打包:
ftp://219.238.235.183/上传目录(incoming)/DX P.rar |
|