2013-05-17 3 views
0

Следующие фрагменты кода - это мои попытки получить треугольники от индексов и вершин. Вектор indices содержит номер вершины. Вектор vertices содержит координаты, в которых три из них образуют одну вершину. Вместе три вершины образуют треугольник.В чем разница между этими фрагментами кода?

Первый снипп работает, но я бы не хотел использовать дополнительный вектор.

vector<float> coords; 
for(unsigned int i : indices) 
{ 
    coords.push_back(vertices[3 * i + 0]); 
    coords.push_back(vertices[3 * i + 1]); 
    coords.push_back(vertices[3 * i + 2]); 
} 
for(unsigned int i = 0; i < coords.size(); i += 9) 
{ 
    triangles->addTriangle(
     btVector3(coords[i + 0], coords[i + 1], coords[i + 2]), 
     btVector3(coords[i + 3], coords[i + 4], coords[i + 5]), 
     btVector3(coords[i + 6], coords[i + 7], coords[i + 8]) 
    ); 
} 

Второй сниппет не работает, это приводит к нарушению доступа.

float coords[9]; 
for(unsigned int i = 0; i < indices.size(); i += 9) 
{ 
    for(int n = 0, j = 0; j < 3; ++j) 
     for(int k = 0; k < 3; ++k, ++n) 
      coords[n] = vertices[3 * indices[i + n] + k]; 

    triangles->addTriangle(
     btVector3(coords[0], coords[1], coords[2]), 
     btVector3(coords[3], coords[4], coords[5]), 
     btVector3(coords[6], coords[7], coords[8]) 
    ); 
} 

Я не нашел разницы. Почему не работает второй фрагмент?

+0

@ Джон. Я не знал, что эта страница существует. Как мы можем переместить вопрос? – danijar

+1

Во втором примере вы не используете 'j', который я вижу? – John

+2

@Jon ["5. Насколько мне известно, работает ли код?"] (Http://codereview.stackexchange.com/faq#im-confused-what-questions-are-on-topic-for- этот сайт) Нет, это не так. – Dukeling

ответ

2
coords[n] = vertices[3 * indices[i + n] + k]; 

должен быть

coords[n] = vertices[3 * indices[i + j] + k]; 
+1

Правильно. Кроме того, 'i' должен быть увеличен на 3 вместо 9. – danijar

1

Вы перебор i от 0 до indices.size() с шагом i += 9 но доступ indices[i + n] что очень вероятно, вне границ.

+0

Переменная 'n' должна находиться в диапазоне от 0 до 9, так что' i + n' все еще находится в диапазоне от 0 до 'indices.size()'. Это неправильно? – danijar

+0

В зависимости от вашего 'indices.size()', 'i' может стать таким же большим, как' indices.size() - 1', если вы добавите '9', вы должны быть вне пределов. –

+0

Вы правы. Я проблема в том, что 'i' увеличивается на 9 вместо 3. Но треугольник состоит из трех индексов, а не девяти. – danijar