2013-02-22 75 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