1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| void init()
{
m_PhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION);
if (!m_PhysicsSDK) return;
// Set the physics parameters
m_PhysicsSDK->setParameter(NX_SKIN_WIDTH, 0.05f);
NxSceneDesc sceneDesc;
sceneDesc.gravity = m_DefaultGravity;
m_scene = m_PhysicsSDK->createScene(sceneDesc);
if(!m_scene)
{
sceneDesc.simType = NX_SIMULATION_SW;
m_scene = m_PhysicsSDK->createScene(sceneDesc);
if(!m_scene) return;
}
/*create plane*/
NxPlaneShapeDesc planeDesc;
planeDesc.normal = NxVec3(0,1,0);
planeDesc.localPose.t = NxVec3(0,0,0);
planeDesc.group = GROUP_COLLIDABLE_NON_PUSHABLE;
planeDesc.normal = NxVec3(0,1,0);
NxActorDesc descPLane;
descPLane.shapes.push_back(&planeDesc);
descPLane.body = NULL;
plane = m_scene->createActor(descPLane);
plane->setGroup(GROUP_COLLIDABLE_NON_PUSHABLE);
NxShape*const* shapes = plane->getShapes();
NxU32 nShapes = plane->getNbShapes();
while (nShapes--)
{
shapes[nShapes]->setGroup(GROUP_COLLIDABLE_NON_PUSHABLE);
}
/*create controller*/
NxCapsuleControllerDesc ctrldesc;
ctrldesc.position.x = 0.0f;
ctrldesc.position.y = 20.0f;
ctrldesc.position.z = 0.0f;
ctrldesc.radius = 1.0f;
ctrldesc.height = 2.0f;
ctrldesc.upDirection = NX_Y;
ctrldesc.slopeLimit = 45;
ctrldesc.skinWidth = 0.05f;
ctrldesc.stepOffset = 0.5;
ctrldesc.stepOffset = 1.0f * 0.5;
ctrldesc.callback = &gControllerHitReport;
m_controller = gCM.createController(m_scene, ctrldesc);
}
void loop()
{
static float time = 0.0f;
time+=0.0001f;
NxVec3 d = m_DefaultGravity*time*-1;
NxU32 collisionFlags;
int h = plane->getGroup();
m_controller->move(d, GROUP_COLLIDABLE_NON_PUSHABLE, 0.000001f, collisionFlags, 0.2f);
std::cout<<(float)(m_controller->getFilteredPosition().x)<<" "<<(float)(m_controller->getFilteredPosition().y)<<" "<<
(float)(m_controller->getFilteredPosition().z)<<" "<<std::endl;
NxVec3 test = m_controller->getActor()->getGlobalPose().t;
int t = m_controller->getActor()->getGroup();
if(collisionFlags)
{
int a =5;
}
m_scene->simulate(time);
m_scene->flushStream();
m_scene->fetchResults(NX_RIGID_BODY_FINISHED, true);
gCM.updateControllers();
}
class ControllerHitReport : public NxUserControllerHitReport
{
/*est appele lors de la collisiosn avec un objet mais justement elle est pas appeler*/
/*plein de trucs dedans*/
}; |
Partager