vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PhysXModule.h
Go to the documentation of this file.
1 #pragma once
2 
3 #ifdef USE_PHYSX
4 
5 #include <NxPhysics.h>
6 #include "SweepSurfaceGeode.h"
7 #include <osg\PositionAttitudeTransform>
8 #include "Utils.h"
9 #include "Hoop.h"
10 
11 #pragma comment(lib, "PhysXLoader.lib")
12 
13 namespace APDYNAMICART
14 {
15 
16 class PhysXModule
17 {
18 
19 public:
20  PhysXModule();
21  ~PhysXModule();
22 
23  void releasePhysics();
24  bool init();
25  bool createScene();
26  void getPhysicsResult();
27  void startPhysics();
28  void renderActors();
29  NxActor** getActors();
30  int getNumActors();
31  bool addHoopActorToScene(HoopPtr hoop, EnvironmentObject* eo);
32  void setStringJoints(HoopPtr first, HoopPtr second, Vec3ArrayPtr points);
33  void setSphericalJoint(const osg::Vec3& point, HoopPtr hoop);
34  void resetScene();
35  void releaseActor(HoopPtr hoop);
36 protected:
38  inline NxQuat toNxQuat( const osg::Quat &qRot );
39  inline NxVec3 toNxVec3( const osg::Vec3& point );
40  inline NxVec3 transformToLocalCoord( NxActor* actor, const NxVec3& point );
41 
42  NxPhysicsSDK* _physicsSDK;
43  NxScene* _scene;
44  NxReal _timeStep;
45  //std::vector<NxActor*> _actors;
46  std::vector<NxJoint*> _joints;
47 
48  std::map<HoopPtr, NxActor*> _actors;
49 };
50 
51 NxQuat PhysXModule::toNxQuat( const osg::Quat &qRot )
52 {
53  NxQuat result;
54  result.x=qRot.x();
55  result.y=qRot.y();
56  result.z=qRot.z();
57  result.w=qRot.w();
58 
59  return result;
60 }
61 
62 NxVec3 PhysXModule::toNxVec3( const osg::Vec3& point )
63 {
64  return point._v;
65 }
66 
67 NxVec3 PhysXModule::transformToLocalCoord( NxActor* actor, const NxVec3& point )
68 {
69  NxMat33 mat;
70  actor->getGlobalPose().M.getInverse(mat);
71  return mat * (point - actor->getGlobalPosition());
72 }
73 
74 }
75 #endif