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这里下载例子程序学习一下。