Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Sw2 PhysX.

Hasonló előadás


Az előadások a következő témára: "Sw2 PhysX."— Előadás másolata:

1 Sw2 PhysX

2 Kiindulás cg.iit.bme.hu/~szecsi/sw2/GraphGameSw2PhysXInitial.zip
include és lib könyvtárak beállítása

3 createResources: physx init
static PxDefaultErrorCallback gDefaultErrorCallback; static PxDefaultAllocator gDefaultAllocatorCallback; static PxSimulationFilterShader gDefaultFilterShader = PxDefaultSimulationFilterShader; foundation = PxCreateFoundation(PX_FOUNDATION_VERSION, gDefaultAllocatorCallback, gDefaultErrorCallback); physics = PxCreatePhysics(PX_PHYSICS_VERSION, *foundation, PxTolerancesScale(), false);

4 PhysX scene létrehozás
PxSceneDesc sceneDesc(physics->getTolerancesScale()); sceneDesc.gravity = PxVec3(0.0f, -9.81f, 0.0f); if (!sceneDesc.cpuDispatcher) { cpuDispatcher = PxDefaultCpuDispatcherCreate(1); sceneDesc.cpuDispatcher = cpuDispatcher; } if (!sceneDesc.filterShader) sceneDesc.filterShader = gDefaultFilterShader; scene = physics->createScene(sceneDesc);

5 anyag material = physics->createMaterial(0.5, 0.5, 0.5);

6 Labda hozzunk létre egy Ball példányt nézzük meg a konstruktorát
gravitáció most legyen (kommentezzük ki a kikapcsolását) paraméterek ballMesh tegyük be az entities vektorba

7 Eredmény megjelenő labda

8 animate scene->simulate(dt); scene->fetchResults(true);

9 Eredmény zuhanó labda

10 Platform létrehozása mesh betöltése ball mintájára
ütközőgeometria Ball mintájára (új Platform osztály) PxBoxGeometry( PxVec3(50, 5, 50)) entitás létrehozása Ball mintájára

11 Eredmény zuhanó labda és platform

12 Kinematikus platform actor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, true); //PxRigidBodyExt::updateMassAndInertia(*actor, density);

13 Eredmény platformon pattogó labda

14 Robotkar alkatrészei mesh-ek betöltése ball mintájára
ütközőgeometriák Ball mintájára (új osztályok) actor->setActorFlag(PxActorFlag::eDISABLE_GRAVITY, true); entitások ügyesen elhelyezve egyelőre csak a base12 elem elég a platformhoz fogjuk jointolni később majd a többi alkatrész is kell

15 Joint építő metódus void buildJoint( Entity::P r0, Entity::P r1,
const physx::PxVec3& anchor, const physx::PxVec3& axis, int motorKey, int motorBackwardsKey);

16 Joint építő metódus void Game::buildJoint(Entity::P r0, Entity::P r1, const PxVec3& anchor, const PxVec3& axis, int motorKey, int motorBackwardsKey) { PxVec3 turn = axis.cross(PxVec3(1, 0, 0)); float qangle = asin(turn.magnitude()); PxVec3 qaxis = turn.getNormalized(); if (qangle < f) qaxis = PxVec3(0, 1, 0); if (axis.x < 0) qangle += 3.14; }

17 Joint építő metódus PxD6Joint* joint = PxD6JointCreate(*physics,
r0->getActor(), r0->getActor()->getGlobalPose().getInverse() * PxTransform(anchor) * PxTransform(PxQuat(qangle, qaxis)), r1->getActor(), r1->getActor()->getGlobalPose().getInverse() * PxTransform(anchor) * PxTransform(PxQuat(qangle, qaxis)));

18 Joint építő metódus joint->setMotion(PxD6Axis::eX, PxD6Motion::eLOCKED); joint->setMotion(PxD6Axis::eY, PxD6Motion::eLOCKED); joint->setMotion(PxD6Axis::eZ, PxD6Motion::eLOCKED); joint->setMotion(PxD6Axis::eTWIST, PxD6Motion::eFREE); joint->setMotion(PxD6Axis::eSWING1, PxD6Motion::eLOCKED); joint->setMotion(PxD6Axis::eSWING2, PxD6Motion::eLOCKED); }

19 buildJoint segítségével elemek kapcsolása
platformhoz kötve a base elem függőleges tengely körül foroghat ejtsünk rá pattogó labdákat ügyesen, hogy lássuk hogy tényleg elforog-e

20 Motor a jointba PxD6JointDrive drive( f, f, PX_MAX_F32, false); joint->setDrive(PxD6Drive::eTWIST, drive); joint->setDrivePosition(PxTransform(PxQuat(1, PxVec3(1.0f, 0.0f, 0.0f))));

21 Eredmény elfordult, pozíciótartó joint

22 Joint adatszerkezet Game.h-ba
struct JointData { physx::PxD6Joint* joint; int motorKey; int motorBackwardsKey; float angle; }; std::vector<JointData> joints;

23 Joint mentése a buildJointban
JointData jd; jd.joint = joint; jd.motorKey = motorKey; jd.motorBackwardsKey = motorBackwardsKey; jd.angle = 0.0f; joints.push_back(jd);

24 Game::animate minden jointra aztán a szimuláció keysPressed alapján
joint.angle növelés vagy csökkentés setDrivePosition aztán a szimuláció

25 Eredmény forgatható joint

26 Feladat építsük meg a teljes robotkart
próbáljuk meg vele felvenni a labdát


Letölteni ppt "Sw2 PhysX."

Hasonló előadás


Google Hirdetések