DirectX9为什么画不出来?急!

dataxdata 2013-02-26 09:52:54
用DirectX9画一个最简单的线,从原点画到(2, 0, 0),为什么画不出来?

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);
}


运行后,只有Clear产生的黑屏,没有任何线画出来,为什么?
...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dataxdata 2013-03-13
  • 打赏
  • 举报
回复
画出来了,把坐标系搞反了
jimette 2013-02-26
  • 打赏
  • 举报
回复
只能按书上的代码对了!
dataxdata 2013-02-26
  • 打赏
  • 举报
回复
引用 1 楼 sha_jinhao 的回复:
变换一下眼睛的位置!
变成白色也是一样,按理说我把vecLook设到了原点位置,无论在什么地方看,都要看回原点,原点附近的东西都应该显示出来,是什么地方出了问题?
jimette 2013-02-26
  • 打赏
  • 举报
回复
用白色的屏幕看的清楚!
jimette 2013-02-26
  • 打赏
  • 举报
回复
变换一下眼睛的位置!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧