2015-04-05 126 views
0

我有麻煩生成與四邊形的平坦地形,我認爲四邊形正確定位,但索引是不正確的..有人可以請看看並告訴我我做錯了什麼或如何我可以修好它?基本上顯示地形,但完全錯誤。我認爲這是指數定位,請幫助我,將不勝感激。DirectX 9地形生成C++

FOR循環:

for(int i = 0; i < NUM_VERTS; i += 4){ 
    for(int x = 0; x < j; x ++){ 
     for(int z = 0; z < j; z ++){ 
      verts[i] = D3DVertex::VertexPositionNormalTexture(x, -1.0f, z+1, n, 1.0f, g, 0.0f, 0.0f); 
      verts[i+1] = D3DVertex::VertexPositionNormalTexture(x+1, -1.0f, z+1, n, 1.0f, g, 1.0f, 0.0f); 
      verts[i+2] = D3DVertex::VertexPositionNormalTexture(x, -1.0f, z, n, 1.0f, g, 0.0f, 1.0f); 
      verts[i+2] = D3DVertex::VertexPositionNormalTexture(x+1, -1.0f, z, n, 1.0f, g, 0.0f, 1.0f); 
      indices[i] = i; 
      indices[i+1] = i+1; 
      indices[i+2] = i+2; 
      indices[i+3] = i+2; 
      indices[i+4] = i+1; 
      indices[i+5] = i+3; 
     } 
    } 
    //MessageBox(NULL, L"Test", NULL, NULL); 
} 
+1

你真正的問題是什麼? – 2015-04-05 13:52:27

+0

我的代碼有什麼問題,以及如何正確排列這些元素,使它成爲一個四元組地形。 NUM_VERTS = 24和NUM_INDECES = 36 – 2015-04-05 14:17:42

回答

1

你最外層循環是沒有意義的。相反,保持了頂點緩衝和索引緩衝,像這樣兩個指標:

int iVertex = 0; 
int iIndex = 0; 
for(int x = 0; x < j; x ++){ 
    for(int z = 0; z < j; z ++){ 
     verts[iVertex ] = D3DVertex::VertexPositionNormalTexture(x, -1.0f, z+1, n, 1.0f, g, 0.0f, 0.0f); 
     verts[iVertex+1] = D3DVertex::VertexPositionNormalTexture(x+1, -1.0f, z+1, n, 1.0f, g, 1.0f, 0.0f); 
     verts[iVertex+2] = D3DVertex::VertexPositionNormalTexture(x, -1.0f, z, n, 1.0f, g, 0.0f, 1.0f); 
     verts[iVertex+3] = D3DVertex::VertexPositionNormalTexture(x+1, -1.0f, z, n, 1.0f, g, 0.0f, 1.0f); 
     indices[iIndex ] = iVertex; 
     indices[iIndex+1] = iVertex+1; 
     indices[iIndex+2] = iVertex+2; 
     indices[iIndex+3] = iVertex+2; 
     indices[iIndex+4] = iVertex+1; 
     indices[iIndex+5] = iVertex+3; 

     iVertex += 4; 
     iIndex += 6; 
    } 
} 

我以爲你是知道的地形將從0兩個xz方向延伸到j + 1

如果它只是一架飛機,您可能還會考慮使用一個四方飛機。如果您需要多個三角形,則可以考慮將三角形列表轉換爲三角形條。如果你想堅持三角形列表,你至少應該考慮移除重複的頂點(地形中心的每個頂點存在四次)。

+0

是的,我知道它延伸,這是問題,我不知道如何創建一個地形,你能幫我嗎?並解釋原因。感謝您提供循環提示,並感謝您的快速響應。 – 2015-04-05 14:28:56

+0

Oh yeah,j = num_verts/2得到一個鄉紳,但我假設它是錯誤計算的 – 2015-04-05 14:31:08

+0

如果你的頂點數是固定的,你應該計算'j = sqrt(num_verts/4)'。確保這會產生一個自然數。 – 2015-04-05 14:33:28