2013-02-22 79 views
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); 

回答

0

你可以让你所有的四边形1的高度/宽度,然后做一个for循环,像这样:

for(... loop through all the textures) 
{ 
    // create a matrix that scales your quad to make it the correct width/height and in the correct location 
    D3DXMATRIX matrix, scale, translation; 
    D3DXMatrixScaling(&scale, texture.width, texture.height, 0); 
    D3DXMatrixTranslation(&translation, position.x, position.y, 0); 
    matrix = scale * translation; 
    spriteDevice->SetTransform(D3DTS_WORLDMATRIX, &matrix); 
    spriteDevice->SetTexture(0,texture); 
    spriteDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2); 
} 
+0

但是当我用变换的顶点了呢? – user2028359 2013-02-23 01:55:36

+0

你必须用你的转换来填充一些数据结构......也就是说有一个包含每个四元组位置的D3DXVECTOR数组,然后使用这些矢量创建D3DXMatrixTranslation(假设这是你的要求?)。 – pauld 2013-02-25 15:57:43

+0

不,这是不是我的意思是我说如果我使用变形顶点(D3DFVF_XYZRHW)所以我不能使用翻译和规模,当我使用这种顶点格式 – user2028359 2013-02-26 11:49:11