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

PhysX SDK2.8.1 Глюки

#0
15:04, 8 июня 2009

На SDK2.7.0 было всё в порядке, а вот на новом появился интересный глюк, с которым не знаю как боротся.
При попытке удалить тело вываливается МеседжБокс

Rruntime error R6025
- pure virtual function call

Более деталеьное изучение показало, что меседжБокс вываливается тогда когда тело находится в контакте и его удалять.

Собствено ф-я удаления и пробег по контактам:

BBDECL void BBCALL pxDeleteBody(NxActor* body)
{
  BodyData* data = (BodyData*)body->userData;
  gScene->releaseActor(*body);
  delete[] data;
  data = 0;
  body = NULL;
}

class MyContactReport : public NxUserContactReport
{
  public:
  void onContactNotify(NxContactPair& pair, NxU32 events)
  {
    NxContactStreamIterator i(pair.stream);
    
    NxActor* actor0 = pair.actors[0];
    NxActor* actor1 = pair.actors[1];

    
    if (!actor0 && !actor1 ) return;

      BodyData* data0 = (BodyData*)actor0->userData;
      BodyData* data1 = (BodyData*)actor1->userData;
      if (!data0 && !data1) return;

    if (data0->contacttable == 1 && data1->contacttable == 1)
    {
      while(i.goNextPair())
      {
        while(i.goNextPatch())
        {
          const NxVec3& contactNormal = i.getPatchNormal();
          while(i.goNextPoint())
          {
            NxShape * tShape1;
            NxShape * tShape2;
            tShape1 = i.getShape(0);
            tShape2 = i.getShape(1);
            if(data0->nContacts < MAXCONTACTS)
            {
              data0->Contacts[data0->nContacts].pos = i.getPoint();
              data0->Contacts[data0->nContacts].normal = i.getPatchNormal();

              data0->Contacts[data0->nContacts].nforce = pair.sumNormalForce;
              data0->Contacts[data0->nContacts].tforce = pair.sumFrictionForce;
              data0->Contacts[data0->nContacts].body = actor1;
              data0->Contacts[data0->nContacts].shapes = tShape1;
              data0->contactEvent = events;
              data0->nContacts++;
            }
            if(data1->nContacts < MAXCONTACTS)
            {
              data1->Contacts[data1->nContacts].pos = i.getPoint();
              data1->Contacts[data1->nContacts].normal = i.getPatchNormal();

              data1->Contacts[data1->nContacts].nforce = pair.sumNormalForce;
              data1->Contacts[data1->nContacts].tforce = pair.sumFrictionForce;
              data1->Contacts[data1->nContacts].body = actor0;
              data1->Contacts[data1->nContacts].shapes = tShape2;
              data1->contactEvent = events;
              data1->nContacts++;
            }
          }
        }
      }
    }
  }
}gMyContactReport;
Тело со сцены успешно удаляется, после вызова ф-и удаления, и в контактах оно учавствовать не должно. Так же есть подозрение, что виноваты данные в ЮзерДата, хотя точно это выяснить не получается.


#1
21:25, 9 июня 2009

Разобрался сам. Оказывается в новом СДК в контакт Репорт попадают удалёные боди...

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

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