Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.