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

Помогите начинающему в ФизиКСе

#0
23:05, 18 мар. 2007

Подскажите как правильно делать проверку на столкновения между статическим ландшафтом, созданным с помощью ТриМеш и капсулой-игроком, игрок-капсула пролетает сквозь ландшафт :(

построение тримеша:

  NxTriangleMeshDesc TriMeshDesc;
  TriMeshDesc.numVertices = StaticModel.vc;
  TriMeshDesc.numTriangles = StaticModel.fc;
  TriMeshDesc.pointStrideBytes = V_STRIDE;
  TriMeshDesc.triangleStrideBytes = T_STRIDE;
  TriMeshDesc.points = StaticModel.verts;
  TriMeshDesc.triangles = StaticModel.faces;
  TriMeshDesc.flags = 0;

                ... тут идет кукинг.......
             
  NxActorDesc actorDesc;
  NxBodyDesc bodyDesc;

  bodyDesc.angularDamping = 0.5f;
  actorDesc.shapes.pushBack(&ShapeDesc);
  actorDesc.globalPose.t = pos;
  actorDesc.body= &bodyDesc;
  actorDesc.density= 1.0f;
  actorDesc.userData = (void*)1;
  PhysXActor= gScene->createActor(actorDesc);

...............и капсулы.......

  NxBodyDesc CapsuleBodyDesc;
  CapsuleBodyDesc.angularDamping = 0.0f;
  CapsuleBodyDesc.linearVelocity = NxVec3(0.0f, 0.0f, 0.0f);
  NxCapsuleShapeDesc CapsuleDesc;
  CapsuleDesc.height = 20.0f;
  CapsuleDesc.radius = 50.0f;

  CapsuleDesc.materialIndex = FrictionlessMaterialIndex;
  NxActorDesc CapsuleActorDesc;
  CapsuleActorDesc.shapes.pushBack(&CapsuleDesc);
  CapsuleActorDesc.body = &CapsuleBodyDesc;
  CapsuleActorDesc.density = 25.0f;
  CapsuleActorDesc.globalPose.t = NxVec3(-100.0f, 50.0f, -100.0f);

  PhysXPlayer = gScene->createActor(CapsuleActorDesc);
  PhysXPlayer->raiseBodyFlag(NX_BF_FROZEN_ROT_X);
  PhysXPlayer->raiseBodyFlag(NX_BF_FROZEN_ROT_Y);
  PhysXPlayer->raiseBodyFlag(NX_BF_FROZEN_ROT_Z);

...............................рисуется все это так:................
  UpdateDeltaTime();
 
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  glRotatef(cam.v_angle, 1, 0, 0);
  glRotatef(cam.h_angle, 0, 1, 0);

  NxVec3 Position = PhysXPlayer->getGlobalPosition();
  cam.x=Position.x;
  cam.y=Position.y;
  cam.z=Position.z;
  glTranslatef(cam.x, -cam.y, cam.z);

  Keys(); --------------------- обрабатывает события клавиатуры и изменяет значения cam
  Position.x = cam.x;
  Position.y = cam.y;
  Position.z = cam.z;
  PhysXPlayer->setGlobalPosition(Position);

  gScene->simulate(1.0f/60.0f);

  StaticModel.draw(); --------------------рисует ландшафт
  glFinish();
  SwapBuffers(wglGetCurrentDC());
  gScene->flushStream();
  gScene->fetchResults(NX_RIGID_BODY_FINISHED, true);

при установке флага NX_BF_KINEMATIC для ландшафта - программа вылетает.
ландшафт грузится из 3дс-файла, может в этом проблема? (не ясно какие координаты указывать в actorDesc.globalPose.t)


#1
15:23, 20 мар. 2007

Огромное спасибо всем ответившим!
Разобрался сам

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

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