Войти
ПрограммированиеФорумФизика

NewtonCollisionCollide

#0
11:21, 26 мар. 2007

Всем ку :)

Встраиваю Ньютоновский collision detection в свой проект. Собственно интересуют коллизии объект (aabb) - геометрия сцены (один монолитный мэш), объект - объект. Проблемы возникли в первом случае: NewtonCollisionCollide всегда возвращает 0, даже тогда, когда видно что объект и сцена intersected.

Делаю так:

1. NewtonBeginBuildTree
2. NewtonAddFace (добавляю по треугольнику из IDirect3DVertexBuffer'a сцены за итерацию)
3. NewtonEndBuildTree - вот здесь трабла тоже есть, если вторым параметром включить флаг оптимизации, то в newton.dll вылетает exception, без флага оптимизации все работает нормально.
4. sceneCollision готов
5. Создаю коллизию для объекта через NewtonCreateBox
6. Вызываю NewtonCollisionCollide, который почему-то всегда возвращает false.

  • В NewtonCollide передаю мировые матрицы каждого объекта (камера работает через view) - хотя возможно проблема еще и в том, что некорректно передаются матрицы.
  • Вот часть кода загрузки геометрии:

        // получаем данные из ID3DXMesh
        vertices = m_sceneModel->GetVertices(&vcount);
        if (!vertices)
          return false;
        indices = m_sceneModel->GetIndices(&icount);
        if (!indices)
          return false;
    
        NewtonTreeCollisionBeginBuild(m_sceneCollision);
             // обходим массив индексов, предполагая, что каждые три индекса _правильно_ определяют треугольник
          for (unsigned int i = 0; i < icount - 4; i += 3)
            {
                 tritmp[0] = vertices[indices[i]].x;
                tritmp[1] = vertices[indices[i]].y;
                tritmp[2] = vertices[indices[i]].z;
                 tritmp[3] = vertices[indices[i+1]].x;
                tritmp[4] = vertices[indices[i+1]].y;
                tritmp[5] = vertices[indices[i+1]].z;
                tritmp[6] = vertices[indices[i+2]].x;
                tritmp[7] = vertices[indices[i+2]].y;
                tritmp[8] = vertices[indices[i+2]].z;
              NewtonTreeCollisionAddFace(m_sceneCollision, 3, tritmp, 12, 1);
            }
        NewtonTreeCollisionEndBuild(m_sceneCollision, 0);

    Пока предположения только два: неправильно загружается геометрия сцены, или механизм коллизий не работает без создания rigid body (NewtonBody*)
    Возможно у кого-то есть опыт использования Ньютоновского механизма коллизий ? Возможно кто-то может сказать что-то по этому вопросу ... :)


    Всем спасибо за внимание.


    ПрограммированиеФорумФизика

    Тема в архиве.