2015-04-05 5 views
0

У меня возникли проблемы с созданием плоского ландшафта с квадроциклами, я думаю, что квадрациклы расположены правильно, но индексы неверны. Может кто-нибудь, пожалуйста, посмотрите и скажите, что я делаю неправильно или как я могу починить это? В основном местность отображается, но совершенно неправильно. Я ДУМАЮ, что это позиционирование индексов, пожалуйста, помогите мне, это было бы высоко оценено.DirectX 9 Генерация ландшафта C++

ДЛЯ LOOP:

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

Что было бы вашим вопросом? –

+0

В чем дело с моим кодом, и как я могу правильно упорядочить декодирование так, чтобы он был четырехгранным. NUM_VERTS = 24 и NUM_INDECES = 36 –

ответ

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 до j + 1 в обоих x и z направлении.

Если это просто самолет, вы можете также рассмотреть возможность использования одного квадранта. Если вам нужно несколько треугольников, вы можете подумать о преобразовании списка треугольников в полосу треугольника. Если вы хотите придерживаться списка треугольников, вы должны хотя бы рассмотреть возможность удаления повторяющихся вершин (каждая вершина в центре местности существует четыре раза).

+0

Да, я знаю, что он растягивается, это проблема, я не знаю, как создать ландшафт, можете ли вы мне помочь? и объясните, почему. Спасибо за подсказку с петлей и благодарю вас за ваш быстрый ответ. –

+0

О, да, j = num_verts/2, чтобы получить сквайр, но я предполагаю, что он ошибочно рассчитан –

+0

Если число вершин исправлено, вы должны вычислить 'j = sqrt (num_verts/4)'. Убедитесь, что это приведет к натуральному числу. –

 Смежные вопросы

  • Нет связанных вопросов^_^