|
我就是这样做,但效果不好,我写了一个类,你可帮我看看,
class CDrawLine
{
public:
CDrawLine(LPDIRECT3DDEVICE9 pD3DDevice);
virtual ~CDrawLine();
HRESULT InitialiseVertexBuffer();
void Render();
LPDIRECT3DDEVICE9 m_pD3DDevice;
LPDIRECT3DVERTEXBUFFER9 m_pVertexBuffer; // Buffer to hold vertices
private:
struct CUSTOMVERTEX
{
FLOAT x, y, z; // The transformed position for the vertex.
DWORD colour; // The vertex colour.
};
};
CDrawLine::CDrawLine(LPDIRECT3DDEVICE9 pD3DDevice)
{
m_pD3DDevice =pD3DDevice;
m_pVertexBuffer = NULL;
InitialiseVertexBuffer();
}
CDrawLine::~CDrawLine()
{
SafeRelease(m_pVertexBuffer);
}
void CDrawLine::Render()
{
if(m_pD3DDevice == NULL)
{
return;
}
//Rendering our triangle
m_pD3DDevice->SetStreamSource(0, m_pVertexBuffer, 0,sizeof(CUSTOMVERTEX));
m_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
m_pD3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, 2);
m_pD3DDevice-> resent(NULL, NULL, NULL, NULL);
}
HRESULT CDrawLine::InitialiseVertexBuffer()
{
VOID* pVertices;
//Store each point of the triangle together with it's colour
CUSTOMVERTEX cvVertices[] =
{
{ 0, 0, 0, D3DCOLOR_XRGB(255,0,0) },
{ 10, 120, 0, D3DCOLOR_XRGB(255,0,0) },
};
//Create the vertex buffer from our device
if(FAILED(m_pD3DDevice->CreateVertexBuffer(2 * sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &m_pVertexBuffer,NULL)))
{
return E_FAIL;
}
//Get a pointer to the vertex buffer vertices and lock the vertex buffer
if(FAILED(m_pVertexBuffer->Lock(0, sizeof(cvVertices), (VOID**)&pVertices, 0)))
{
return E_FAIL;
}
//Copy our stored vertices values into the vertex buffer
memcpy(pVertices, cvVertices, sizeof(cvVertices));
//Unlock the vertex buffer
m_pVertexBuffer->Unlock();
return S_OK;
}
这个程序调入到我的程序中能画出真线,但是感觉其与并非我场景中的所要的长度, |
|