0
我在DirectX 9中完成了一个框架,它使用一个单一的VertexBuffer来绘制我加载的每个纹理,我使用了一个Vertex Array来绘制锁定和解锁调用中的每个Texture Quad。我听说有一种叫Batching的东西,我可以锁定一次,当我绘制所有东西时解锁。我知道我可以在一次调用中绘制每个纹理四元组以锁定和解锁,但我不知道如何为这些中的每一个设置不同的纹理。这里的任何人都可以引导我DirectX中的批处理
vertexBufferRHW->Lock(0, 0, (void**)&VerticesRHW, NULL);
VerticesRHW[0].Color = color;
VerticesRHW[0].X = (float) Position.X;
VerticesRHW[0].Y = (float) Position.Y;
VerticesRHW[0].Z = 0.0f;
VerticesRHW[0].RHW = 1.0f;
VerticesRHW[0].U = 0.0f;
VerticesRHW[0].V = 0.0f;
VerticesRHW[1].Color = color;
VerticesRHW[1].X = (float) (Position.X+TextureFile.Width);
VerticesRHW[1].Y = (float) Position.Y;
VerticesRHW[1].Z = 0.0f;
VerticesRHW[1].RHW = 1.0f;
VerticesRHW[1].U = 1.0f;
VerticesRHW[1].V = 0.0f;
VerticesRHW[2].Color = color;
VerticesRHW[2].X = (float) (Position.X+TextureFile.Width);
VerticesRHW[2].Y = (float) (Position.Y+TextureFile.Height);
VerticesRHW[2].Z = 0.0f;
VerticesRHW[2].RHW = 1.0f;
VerticesRHW[2].U = 1.0f;
VerticesRHW[2].V = 1.0f;
VerticesRHW[3].Color = color;
VerticesRHW[3].X = (float) Position.X ;
VerticesRHW[3].Y = (float) (Position.Y+TextureFile.Height);
VerticesRHW[3].Z = 0.0f;
VerticesRHW[3].RHW = 1.0f;
VerticesRHW[3].U = 0.0f;
VerticesRHW[3].V = 1.0f;
vertexBufferRHW->Unlock();
spriteDevice->SetTexture(0,TextureFile.TextureFile);
spriteDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);
但是当我用变换的顶点了呢? – user2028359 2013-02-23 01:55:36
你必须用你的转换来填充一些数据结构......也就是说有一个包含每个四元组位置的D3DXVECTOR数组,然后使用这些矢量创建D3DXMatrixTranslation(假设这是你的要求?)。 – pauld 2013-02-25 15:57:43
不,这是不是我的意思是我说如果我使用变形顶点(D3DFVF_XYZRHW)所以我不能使用翻译和规模,当我使用这种顶点格式 – user2028359 2013-02-26 11:49:11