19,468
社区成员
发帖
与我相关
我的任务
分享
struct CustomVertexColor {
float eX, eY, eZ;
DWORD dwColor;
};
const int c_d3d9_vertexfvf_idXyzColor = D3DFVF_XYZ|D3DFVF_DIFFUSE;
//初始化顶点
CustomVertexColor a_vertex[2];
int nVertex = 2;
a_vertex[0].eX = 0;
a_vertex[0].eY = 0;
a_vertex[0].eZ = 0;
a_vertex[1].eX = 2;
a_vertex[1].eY = 0;
a_vertex[1].eZ = 0;
a_vertex[0].dwColor = D3DCOLOR_ARGB(128, 255, 255, 255);
a_vertex[1].dwColor = D3DCOLOR_ARGB(128, 255, 255, 255);
// 设置顶点缓冲区
IDirect3DVertexBuffer9 *pVertexBuf;
mp_dev->CreateVertexBuffer(sizeof(CustomVertexColor) * nVertex, 0, c_d3d9_vertexfvf_idXyzColor, D3DPOOL_DEFAULT, &pVertexBuf, NULL);
void *pVertex;
pVertexBuf->Lock(0, 0, &pVertex, 0);
memcpy(pVertex, a_vertex, sizeof(CustomVertexColor) * nVertex);
pVertexBuf->Unlock();
// 开始画图
if ( FAILED(mp_dev->BeginScene()) )
MessageBeep(0xFFFFFFFF);
if ( FAILED(mp_dev->Clear(0, NULL, D3DCLEAR_TARGET, 0, 1.0f, 0)) )
MessageBeep(0xFFFFFFFF);
SetTransform();
if ( FAILED(mp_dev->SetStreamSource(0, pVertexBuf, 0, nVertex)) )
MessageBeep(0xFFFFFFFF);
if ( FAILED(mp_dev->SetFVF(c_d3d9_vertexfvf_idXyzColor)) )
MessageBeep(0xFFFFFFFF);
if ( FAILED(mp_dev->DrawPrimitive(D3DPT_LINELIST, 0, nVertex / 2)) )
MessageBeep(0xFFFFFFFF);
mp_dev->EndScene();
if ( FAILED(mp_dev->Present(NULL, NULL, NULL, NULL)) )
MessageBeep(0xFFFFFFFF);
pVertexBuf->Release();
// Transform部分
void SetTransform() {
D3DXMATRIX matTranslate, matScale, matRotate, matRotateY, matRotateZ;
static D3DXMATRIX s_matTransWorld, s_matTransView, s_matTransProj;
D3DXMatrixIdentity(&s_matTransWorld);
float eScale = 50.0;
D3DXMatrixScaling(&matScale, eScale, eScale, eScale);
D3DXMatrixMultiply(&s_matTransWorld, &s_matTransWorld, &matScale);
D3DXVECTOR3 vecPosition(0.0f, 0.0f, -450.f);
D3DXVECTOR3 vecLook(0.0f, 0.0f, 0.0f);
D3DXMatrixLookAtLH(&s_matTransView, &vecPosition, &vecLook, &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); //up direction
D3DXMatrixPerspectiveFovLH(&s_matTransProj, D3DX_PI/4, float(pnlRender->Width)/float(pnlRender->Height), 1.0f, 600.0f);
mp_dev->SetTransform(D3DTS_WORLD, &s_matTransWorld);
mp_dev->SetTransform(D3DTS_VIEW, &s_matTransView);
mp_dev->SetTransform(D3DTS_PROJECTION, &s_matTransProj);
}