首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

DirectX一个新手有关问题(绘制三角形)

2012-03-29 
DirectX一个新手问题(绘制三角形)我现在在接触DirectX开发,但是遇到一个很难理解的问题,我想要绘制一个简

DirectX一个新手问题(绘制三角形)
我现在在接触DirectX开发,但是遇到一个很难理解的问题,我想要绘制一个简单的三角形,我用DrawPrimitive方法绘制,没有问题,然后用DrawIndexedPrimitive方法问题,当我将索引顺序设置为0,1,2时,我认为这样和前面那个方法完全相同,但是发现绘制不出来。但是将顺序改为2,1,0时,则能顺利绘出来。
  我知道DirectX绘制的时候,如果是背面的话是不会设置的,刚开始还认为是可能用后一个方法应用到摄像头了(我都设置的,eye(0.0f, 0.0f, -5.0f)),前者没有应用到设置的摄像头,导致视角发生变化,所以我就将摄像头eye改成(0.0f, 0.0f, 5.0f)),但是这样的话,不管是0,1,2还是2,1,0, 都绘制不出来了,就算是成90度了 也至少能绘制出一条线吧。
  新手,水平比较低,希望哪位了解的朋友能帮我解释一下,不胜感谢。

顶点坐标和索引设置如下:
Device->CreateVertexBuffer(sizeof(Vertex)*3, 0, D3DFVF_XYZ, D3DPOOL_MANAGED, &VB, 0);
Vertex* vertices;
VB->Lock(0, 0, (void**)&vertices, 0);
vertices[0] = Vertex(-1.0f, 0.0f, 2.0f);
vertices[1] = Vertex( 0.0f, 1.0f, 2.0f);
vertices[2] = Vertex( 1.0f, 0.0f, 2.0f);
VB->Unlock();
Device->CreateIndexBuffer(3*sizeof(DWORD), 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &IB, 0);
DWORD* indices;
IB->Lock(0, 0, (void**)&indices, 0);
indices[0] = 2; indices[1] = 1; indices[2] = 0;
IB->Unlock();

D3DXMATRIX v;
D3DXVECTOR3 eye(0.0f, 0.0f, -5.0f);
D3DXVECTOR3 at(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH(&v, &eye, &at, &up);
Device->SetTransform(D3DTS_VIEW, &v);

D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI/2, 800/600, 1.0f, 1000.0f);
Device->SetTransform(D3DTS_PROJECTION, &proj);

Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
绘制是如下
if (Device) {
Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);

Device->SetStreamSource(0, VB, 0, sizeof(Vertex));
Device->SetIndices(IB);
Device->SetFVF(D3DFVF_XYZ);

Device->BeginScene();
//Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);  
Device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 3, 0, 1);
Device->EndScene();

Device->Present(0, 0, 0, 0);
}

[解决办法]
www.codesamper.com这里下载例子程序学习一下。

热点排行