OROCHI
 
Loading...
Searching...
No Matches
GxDynamics.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14#define DYNAMICS_COLLISION_SKIN_WIDTH (0.025f)
15#define DYNAMICS_COLLISION_MARGIN (0.05f)
16#define DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE (GxMath::VALUE_32K)
17#define DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE (1)
18#define DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE (1)
19#define DYNAMICS_ALGORITHM_NUM (2)
20
22
23//===========================================================================
25//===========================================================================
26class GxDynamics : public GxClassBase
27{
28 //-----------------------------------------------------------
30 //-----------------------------------------------------------
32public:
33 // RTTI宣言
34 GX_RTTI_CLASS(GxDynamics, GxClassBase)
35 // new, delete定義
36 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS )
37 // GxClassBase継承クラス用禁止宣言
39
40
41 static const GxColor COLOR_OBJECT;
42
43 class GxWorld;
44 class GxObject;
45 class GxConstraint;
46 struct GxRigidBodyParam;
47 struct GxRayCallback;
48 struct GxConvexCallback;
50 struct GxRayResult;
51
53 static constexpr u32 FLAG_ALL = 0x7fffffff;
54
57 {
58 //-----------------------------------------------------------
60 //-----------------------------------------------------------
62
63 // RTTI定義
64 GX_RTTI_STRUCT(GxParamConeTwist);
65
67 //-------------------------------------------------------------
69 //-------------------------------------------------------------
71
74 : _twistLimit( PI_2 )
75 , _swingLimit1( PI_2 )
76 , _swingLimit2( PI_2 )
77 , _disableCollision( true )
78 {}
81
83 //-------------------------------------------------------------
85 //-------------------------------------------------------------
87
92
94 };
95
97 typedef void (GxClassBaseRoot::* DYNAMICS_CALLBACK)(void);
98
100 //-----------------------------------------------------------
102 //-----------------------------------------------------------
104
106 GxDynamics(void);
108 ~GxDynamics(void) override;
109
111 //-----------------------------------------------------------
113 //-----------------------------------------------------------
115
117 void clearList(void);
118
120 GX_FORCE_INLINE virtual GxObject* allocObject(void) { return nullptr; }
121
123 GxObject* getObject(u32 index);
124
126 u32 getObjectCount(void);
127
129 virtual void deleteObject(GxObject* pObject);
130
132 virtual void detachObject(GxObject* pObject);
133
135 virtual void detachConstraint(GxConstraint* pConstraint);
136
138 GxObject* createSphere(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeSphere& sphere, const GxRigidBodyParam& rigidParam, f32 margin = DYNAMICS_COLLISION_MARGIN);
139
141 GxObject* createBox(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeBox& box, const GxRigidBodyParam& rigidParam, f32 margin = DYNAMICS_COLLISION_MARGIN);
142
144 GxObject* createCylinder(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeCylinder& cylinder, const GxRigidBodyParam& rigidParam, f32 margin = DYNAMICS_COLLISION_MARGIN);
145
147 GxObject* createMultisphere(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeMultisphere& multisphere, const GxRigidBodyParam& rigidParam, f32 margin = DYNAMICS_COLLISION_MARGIN);
148
150 GxObject* createCapsule(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeCapsule& capsule, const GxRigidBodyParam& rigidParam, f32 margin = DYNAMICS_COLLISION_MARGIN);
151
153 virtual GxObject* createConvexShape(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxVector3* pVertex, u32 numVertex, const GxRigidBodyParam& rigidParam, f32 margin);
154
156 GxObject* createMesh(u32 index, b32 active, GxMatrixAffine* pMatrix, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeTrimesh& trimesh, f32 friction = 0.5f, b32 isCompress = true, GxVector3* pAabbMin = nullptr, GxVector3* pAabbMax = nullptr, f32 margin = DYNAMICS_COLLISION_MARGIN);
157
159 GxObject* createCompoundObject(GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, f32 margin = DYNAMICS_COLLISION_MARGIN);
160
162 GX_FORCE_INLINE b32 isActive(void) const { return _active; }
163
165 void setActive(b32 active);
166
168 virtual GxConstraint* allocConstraint(void);
169
171 GxConstraint* getConstraint(u32 index);
172
174 u32 getConstraintCount(void);
175
177 virtual void deleteConstraint(GxDynamics::GxConstraint* pConstraint);
178
182 GxConstraint* createConstraintSpherical(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1, b32 disableCollisions = false);
183
187 GxConstraint* createConstraintRevolute(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1, b32 disableCollisions = false);
191 GxConstraint* createConstraintRevolute(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1, const GxVector3& axis0, const GxVector3& axis1, const GxVector3& base0, const GxVector3& base1, b32 disableCollisions = false);
192
196 GxConstraint* createConstraintConeTwist(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1, const GxParamConeTwist& param);
197
199 GxConstraint* createConstraintFixed(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1 );
200
202 virtual void initialize(GxDynamics::GxWorld* pRegisterWorld, GxUnitBase* pUnit, GxDynamics::DYNAMICS_CALLBACK, u32 threadIndex);
203
205 virtual void prepareCheck(void);
206
208 virtual void preUpdate(void);
209
211 virtual void postUpdate(void);
212
214 void setActiveAll(b32 active);
215
217 constexpr GxWorld* getWorld(void) const { return _pRegisterWorld; }
218
219protected:
221 constexpr void setWorldNull( void ) { _pRegisterWorld = nullptr; }
222public:
223
225 GX_FORCE_INLINE void setCallback(DYNAMICS_CALLBACK pCallback) { _pCallback = pCallback; }
227 void executeCallback(void);
228
229#if GX_DEVELOP
231 virtual void developDrawObject(const GxColor color = GxColor::WHITE, PRIMITIVE_FILL_MODE fillMode = PRIMITIVE_FILL_MODE::WIRE);
232
234 GX_FORCE_INLINE static void setDevelopDraw( b32 display ) { getGxSysMain()->setDevelopFlag(DEVELOP_FLAG_COLLISION_DRAW_DYNAMICS, display); }
236 GX_FORCE_INLINE static void setDevelopDrawConstraint( b32 display) { getGxSysMain()->setDevelopFlag(DEVELOP_FLAG_COLLISION_DRAW_DYNAMICS_CONSTRAINT, display); }
237
239 GX_FORCE_INLINE static b32 getDevelopDraw( void ) { return getGxSysMain()->isOnDevelopFlag(DEVELOP_FLAG_COLLISION_DRAW_DYNAMICS); }
241 GX_FORCE_INLINE static b32 getDevelopDrawConstraint( void ) { return getGxSysMain()->isOnDevelopFlag(DEVELOP_FLAG_COLLISION_DRAW_DYNAMICS_CONSTRAINT); }
242#endif // GX_DEVELOP
243
244protected:
246 virtual GxObject* addObject(void);
247
249 GxConstraint* addConstraint(void);
250
252 //-----------------------------------------------------------
254 //-----------------------------------------------------------
256protected:
258 DYNAMICS_CALLBACK _pCallback;
261
264
266};
267
268//===========================================================================
270//===========================================================================
271class GxDynamics::GxWorld : public gx::core::GxClassBase
272{
273 //-------------------------------------------------------------
275 //-------------------------------------------------------------
277public:
278 // RTTI定義
279 GX_RTTI_CLASS( GxDynamics::GxWorld, gx::core::GxClassBase );
280 // new, delete定義
281 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS );
282 // GxClassBase継承クラス用禁止宣言
284
287
288#if (USE_VEHICLE)
290 static constexpr u32 MAX_NUM_VEHICLE_COUNT = GxMath::VALUE_16;
292 static constexpr u32 MAX_NUM_SURFACE_TYPES = 1;
294 static constexpr u32 DEFAULT_SURFACE_TYPE = 0;
295#endif //USE_VEHICLE
296
298 //-----------------------------------------------------------
300 //-----------------------------------------------------------
302
304 GxWorld(void);
305
307 ~GxWorld(void) override;
308
310 //-----------------------------------------------------------
312 //-----------------------------------------------------------
314
316 virtual b32 alloc(u32 meshCount, const GxVector3& worldAabbMin, const GxVector3& worldAabbMax, u16 maxHandles,
317 u32 stackAllocatorSize = DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE,
318 u32 maxPersistentManifoldPoolSize = DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE,
319 u32 maxCollisionAlgorithmPoolSize = DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE);
320
322 virtual void free(void);
323
325 virtual void prepareCheck(void);
326
329 virtual void check(void);
330
332 virtual void preUpdate(void);
333
335 virtual void update(void) {}
336
338 virtual void postUpdate(void);
339
340 //---- この関数はGxPhysics外では使わないでほしい
342 GX_FORCE_INLINE virtual void registerObject(GxDynamics::GxObject* /*pObject*/) {}
344 GX_FORCE_INLINE virtual void banObject(GxDynamics::GxObject* /*pObject*/) {}
345
347 GX_FORCE_INLINE virtual void registerConstraint(GxDynamics::GxConstraint* /*pConstraint*/, b32 /*disableCollisions*/) {}
349 GX_FORCE_INLINE virtual void banConstraint(GxDynamics::GxConstraint* /*pConstraint*/) {}
350 //---- ここまで
351
353 void addClass(u32 threadIndex, GxDynamics* pDynamics );
355 void detachClass( GxDynamics* pDynamics );
356
358 GX_FORCE_INLINE void setActive(b32 active) { _active = active; }
360 GX_FORCE_INLINE b32 isActive(void) const { return _active; }
361
363 GX_FORCE_INLINE virtual void reset(void) {}
364
366 virtual void setGravity(const GxVector3& gravity = GxDynamics::GxWorld::DYNAMICS_GRAVITY);
368 GX_FORCE_INLINE virtual void setGravity(const f32 /*gravityX*/, const f32 /*gravityY*/, const f32 /*gravityZ*/) {}
369
388 void setMaxTimeStep( f32 timeStep = 1.0f / 60.f, u32 maxIteration = 8 );
389
391 GX_FORCE_INLINE void setEnableMaxTimeStep(b32 enable){ _enableMaxTimeStep = enable; }
392
394 GX_FORCE_INLINE virtual void detachObjectFromWorld(GxObject* /*pObject*/) {}
395
397 b32 setMeshCount(u32 count);
398
400 void freeMesh(void);
401
403 b32 addMesh(u32 index, GxDynamics::GxObject* pMesh);
404
407
409 GxDynamics::GxObject* getMesh(u32 index);
410
412 constexpr u32 getMeshCount(void) const { return _meshCount; }
413
415 u32 getActiveMeshCount(void);
416
418 u32 getFreeMeshIndex(void);
419
433 virtual b32 checkRayClosestVsWorld(GxDynamics::GxRayResult* /*pRayResult*/, const GxVector3& /*startPosition*/, const GxVector3& /*endPosition*/, GxConditionInformation* /*pConditionInformation*/ = nullptr) { return false; }
434
436 virtual b32 checkRayClosestVsSingle(GxDynamics::GxRayResult* /*pRayResult*/, GxObject* /*pTargetObject*/, const GxVector3& /*startPosition*/, const GxVector3& /*endPosition*/, GxConditionInformation* /*pConditionInformation*/ = nullptr) { return false; }
437
439 constexpr u32 getListClassCount(void) const { return _listClassCount; }
440
442 b32 setListClassCount(u32 count);
443
445 GxArrayClassBase* getListClass(u32 index);
446
447 //-----------------------------------------------------------
472 //-----------------------------------------------------------
473
475 void setGroupCollision( u16 group1, u16 group2, b32 isColide );
476
477protected:
479 GX_FORCE_INLINE void getPropertyList(void* const pValue, u32 index) { *static_cast<GxArrayClassBase**>(pValue) = getListClass(index); }
481 constexpr void setPropertyList(const void* const /*pValue*/, u32 /*index*/) {}
482
484 GX_FORCE_INLINE void setPropListClassCount(u32 count){ setListClassCount(count); }
485
486private:
488 void freeListClass(void);
489
491 void clearListClass(void);
492
494 //-----------------------------------------------------------
496 //-----------------------------------------------------------
498private:
499 b32 _active;
500 GxDynamics::GxObject** _ppMesh;
501 u32 _meshCount;
502 u32 _listClassCount;
503 GxArrayClassBase** _ppDynamicsList;
504
505protected:
511
513};
514
515//===========================================================================
517//===========================================================================
518class GxDynamics::GxObject : public gx::core::GxClassBase
519{
520 //-------------------------------------------------------------
522 //-------------------------------------------------------------
524public:
525 // RTTI定義
526 GX_RTTI_CLASS( GxDynamics::GxObject, gx::core::GxClassBase );
527 // new, delete定義
528 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS );
529 // GxClassBase継承クラス用禁止宣言
531
533 enum
534 {
535 ACTIVE_FLAG_ACTIVE = (1UL << 0),
540 };
541
544 {
545 DYNAMIC = 0,
546 STATIC,
547 KINEMATIC,
548 MAX,
549 };
550#if GX_DEVELOP
552 GX_ENUM_TABLE_MAX(RIGID_BODY_TYPE)
553#endif //GX_DEVELOP
554
556 //-----------------------------------------------------------
558 //-----------------------------------------------------------
560
562 GxObject(void);
564 ~GxObject(void) override;
565
567 GX_FORCE_INLINE virtual void initialize(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/) {}
568
570 //-----------------------------------------------------------
572 //-----------------------------------------------------------
574
576 virtual void prepareCheck(void);
577
579 GX_FORCE_INLINE virtual void preUpdate(void) {}
581 GX_FORCE_INLINE virtual void postUpdate(void) {}
582
584 GX_FORCE_INLINE virtual void reset(void) {}
585
587 GX_FORCE_INLINE virtual void applyForce(const GxVector3& /*force*/, const GxVector3& /*position*/) {}
588
590 GX_FORCE_INLINE virtual void applyImpulse(const GxVector3& /*impulse*/, const GxVector3& /*position*/) {}
591
593 GX_FORCE_INLINE virtual b32 createSphere(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeSphere& /*sphere*/, const GxRigidBodyParam& /*rigidParam*/, f32 /*margin*/) { return false; }
594
596 GX_FORCE_INLINE virtual b32 createBox(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeBox& /*box*/, const GxRigidBodyParam& /*rigidParam*/, f32 /*margin*/) { return false; }
597
599 GX_FORCE_INLINE virtual b32 createCylinder(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeCylinder& /*cylinder*/, const GxRigidBodyParam& /*rigidParam*/, f32 /*margin*/) { return false; }
600
602 GX_FORCE_INLINE virtual b32 createMultisphere(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeMultisphere& /*multiSphere*/, const GxRigidBodyParam& /*rigidParam*/, f32 /*margin*/) { return false; }
603
605 GX_FORCE_INLINE virtual b32 createCapsule(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeCapsule& /*capsule*/, const GxRigidBodyParam& /*rigidParam*/, f32 /*margin*/) { return false; }
606
608 GX_FORCE_INLINE virtual b32 createConvexShape(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxVector3* /*pVertex*/, u32 /*numVertex*/, const GxRigidBodyParam& /*rigidParam*/, f32 /*margin*/) { return false; }
609
611 GX_FORCE_INLINE virtual b32 createCompoundObject(GxMatrixAffine* /*pMatrix*/, s32 /*jointIndex*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, f32 /*margin*/) { return false; }
612
614 GX_FORCE_INLINE virtual b32 createMesh(b32 /*active*/, GxMatrixAffine* /*pMatrix*/, const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeTrimesh& /*trimesh*/, f32 /*friction*/ = 0.5f, b32 /*isCompress*/ = true, GxVector3* /*pAabbMin*/ = nullptr, GxVector3* /*pAabbMax*/ = nullptr, f32 /*margin*/ = DYNAMICS_COLLISION_MARGIN) { return false; }
615
617 GX_FORCE_INLINE virtual b32 addCompoundSphere(const GxVector3& /*offset*/, const GxShapeSphere& /*sphere*/) { return false; }
619 GX_FORCE_INLINE virtual b32 addCompoundBox(const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeBox& /*box*/) { return false; }
621 GX_FORCE_INLINE virtual b32 addCompoundCapsule(const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxShapeCapsule& /*capsule*/) { return false; }
623 GX_FORCE_INLINE virtual b32 addCompoundConvex(const GxVector3& /*offset*/, const GxQuaternion& /*rotateOffset*/, const GxVector3* /*pVertex*/, u32 /*numVertex*/) { return false; }
625 GX_FORCE_INLINE virtual b32 endAddCompound(b32 /*isActive*/, const GxRigidBodyParam& /*rigidParam*/) { return false; }
626
627#if GX_DEVELOP
629 GX_FORCE_INLINE virtual void developDraw(const GxColor& /*color*/, PRIMITIVE_FILL_MODE /*fillMode*/ = PRIMITIVE_FILL_MODE::WIRE) {}
631 virtual void developDrawTrimesh(GxShapeTrimesh* pTrimesh, const GxColor& color, PRIMITIVE_FILL_MODE fillMode = PRIMITIVE_FILL_MODE::WIRE);
632#endif // GX_DEVELOP
633
635 //-----------------------------------------------------------
637 //-----------------------------------------------------------
639
641 GX_FORCE_INLINE virtual void setLinearVelocity(const GxVector3& /*velocity*/) {}
643 GX_FORCE_INLINE virtual void getLinearVelocity(GxVector3& /*velocity*/) {}
644
646 GX_FORCE_INLINE virtual void setAngularVelocity(const GxVector3& /*angular*/) {}
648 GX_FORCE_INLINE virtual void getAngularVelocity(GxVector3& /*angular*/) {}
649
651 GX_FORCE_INLINE virtual void setPosition(const GxVector3& /*position*/) {}
653 GX_FORCE_INLINE virtual void getPosition(GxVector3& /*position*/) {}
654
656 GX_FORCE_INLINE virtual void setQuaternion(const GxQuaternion& /*quaternion*/) {}
658 GX_FORCE_INLINE virtual void getQuaternion(GxQuaternion& /*quaternion*/) {}
659
664 GX_FORCE_INLINE virtual void setDampingRatio(f32 /*linearDamping*/, f32 /*angularDamping*/) {}
665
669 GX_FORCE_INLINE virtual void setDeactivationTime(f32 /*time*/) {}
670
673 GX_FORCE_INLINE virtual void setSleepingThresholds(f32 /*linear*/, f32 /*angular*/) {}
674
676 GX_FORCE_INLINE virtual void setFriction(f32 /*friction*/) {}
677
679 GX_FORCE_INLINE virtual void setRestitution(f32 /*restitution*/) {}
680
682 constexpr void setRegisterWorld(GxDynamics::GxWorld* pWorld) { _pRegisterWorld = pWorld; }
684 constexpr GxDynamics::GxWorld* getRegisterWorld(void) const { return _pRegisterWorld; }
685
687 constexpr GxShape* getShape(void) const { return _pShape; }
689 constexpr GxCollision::COLLISION_SHAPE getShapeType(void) const { return _shapeType; }
690
692 GX_FORCE_INLINE virtual void setMatrix(const GxMatrixAffine& /*matrix*/) {}
694 GX_FORCE_INLINE virtual GxMatrixAffine getMatrix(void) { return GxMatrixAffine(); }
695
696 // マトリクス設定
697 constexpr void setMatrixAddress(GxMatrixAffine* pMatrix){ _pMatrix = pMatrix; }
698 // マトリクス取得
699 constexpr const GxMatrixAffine* getMatrixAddress(void) const { return _pMatrix; }
700
702 constexpr s32 getJointIndex(void) const { return _jointIndex; }
703
705 virtual void setActive(b32 active);
707 GX_FORCE_INLINE b32 isActive(void) const { return _activeFlag.isFlag(ACTIVE_FLAG_ACTIVE); }
708
710 constexpr u32 getActiveFlagAll(void) const { return _activeFlag.getFlag(); }
712 GX_FORCE_INLINE b32 getActiveFlag(u32 flag) const { return _activeFlag.isFlag(flag); }
714 GX_FORCE_INLINE void setActiveFlag(u32 flag, b32 value) { return _activeFlag.setFlag(flag, value); }
715
717 constexpr void setUnit(GxUnitBase* pUnit) { _pUnit = pUnit; }
719 constexpr GxUnitBase* getUnit(void) const { return _pUnit; }
720
722 constexpr u32 getCheckFlag(void) const { return _checkFlag; }
724 constexpr void setCheckFlag(u32 flag) { _checkFlag = flag; }
726 constexpr RIGID_BODY_TYPE getType(void) const { return _type; }
727
729 constexpr void setManagementClass(GxDynamics* pManagementClass) { _pManagementClass = pManagementClass; }
731 constexpr GxDynamics* getManagementClass(void) const { return _pManagementClass; }
732
734 GX_FORCE_INLINE const GxVector3& getOffset(void) const { return _offset; }
736 GX_FORCE_INLINE void setOffset(const GxVector3& offset) { _offset = offset; }
738 constexpr f32 getMass(void) const { return _mass; }
739
741 GX_FORCE_INLINE const GxQuaternion& getRotateOffset(void) const { return _rotateOffset; }
743 GX_FORCE_INLINE void setRotateOffset(const GxQuaternion& offset) { _rotateOffset = offset; }
744
746 virtual b32 isNeedCheck(GxObject* pCollisionObject);
747
749 virtual b32 isHitCheckFlag( u32 targetFlag );
750
752 virtual b32 isHitCheckFlagTrimesh( u32 triangleIndex, u32 targetFlag );
753
755 //-----------------------------------------------------------
757 //-----------------------------------------------------------
759protected:
770 f32 _mass;
774 s16 _group;
775
777};
778
779//===========================================================================
781//===========================================================================
782class GxDynamics::GxConstraint : public gx::core::GxClassBase
783{
784 //-------------------------------------------------------------
786 //-------------------------------------------------------------
788public:
789 // RTTI定義
790 GX_RTTI_CLASS(GxDynamics::GxConstraint, gx::core::GxClassBase);
791 // new, delete定義
792 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS );
793 // GxClassBase継承クラス用禁止宣言
795
797 enum
798 {
799 ACTIVE_FLAG_ACTIVE = (1UL << 0),
805 };
806
808 enum class TYPE
809 {
810 ERROR_ = 0,
811 SPHERICAL,
812 REVOLUTE,
813 CONE_TWIST,
814 PRISMATIC,
817 PULLEY,
818 _6DOF,
819 FIXED,
820 MAX,
821 };
822
824 //-----------------------------------------------------------
826 //-----------------------------------------------------------
828
830 GxConstraint(void);
831
833 ~GxConstraint(void) override {}
834
836 //-----------------------------------------------------------
838 //-----------------------------------------------------------
840
843 GX_FORCE_INLINE virtual b32 createConstraintSpherical(b32 /*active*/, GxDynamics::GxObject* /*pObject0*/, GxDynamics::GxObject* /*pObject1*/, const GxVector3& /*pivot0*/, const GxVector3& /*pivot1*/, b32 /*disableCollisions*/) { return false; }
844
847 GX_FORCE_INLINE virtual b32 createConstraintRevolute(b32 /*active*/, GxDynamics::GxObject* /*pObject0*/, GxDynamics::GxObject* /*pObject1*/, const GxMatrixAffine& /*mat0*/, const GxMatrixAffine& /*mat1*/, b32 /*disableCollisions*/) { return false; }
849 GX_FORCE_INLINE virtual b32 createConstraintRevolute(b32 /*active*/, GxDynamics::GxObject* /*pObject0*/, GxDynamics::GxObject* /*pObject1*/, const GxVector3& /*pivot0*/, const GxVector3& /*pivot1*/, const GxVector3& /*axis0*/, const GxVector3& /*axis1*/, const GxVector3& /*base0*/, const GxVector3& /*base1*/, b32 /*disableCollisions*/) { return false; }
850
852 GX_FORCE_INLINE virtual b32 createConstraintConeTwist(b32 /*active*/, GxDynamics::GxObject* /*pObject0*/, GxDynamics::GxObject* /*pObject1*/, const GxMatrixAffine& /*matrix0*/, const GxMatrixAffine& /*matrix1*/, const GxParamConeTwist& /*param*/) { return false; }
853
855 GX_FORCE_INLINE virtual b32 createConstraintFixed(b32 /*active*/, GxDynamics::GxObject* /*pObject0*/, GxDynamics::GxObject* /*pObject1*/, const GxVector3& /*pivot0*/, const GxVector3& /*pivot1*/) { return false; }
856
858 virtual void prepareCheck(void);
859
861 GX_FORCE_INLINE virtual void setParameterRevolute(const f32 /*lowerLimit*/, const f32 /*upperLimit*/) {}
862
863 // TODO: spring, motorの設定
864
865#if GX_DEVELOP
867 GX_FORCE_INLINE virtual void developDraw(void) {}
868#endif // GX_DEVELOP
869
870protected:
872 virtual void initialize(b32 active, TYPE type, b32 disableCollisions);
873
875 constexpr void reset(void) {}
876
878 //-----------------------------------------------------------
880 //-----------------------------------------------------------
882public:
884 constexpr TYPE getType(void) const { return _type; }
885
887 constexpr GxDynamics::GxWorld* getRegisterWorld(void) const { return _pRegisterWorld; }
888
890 constexpr void setRegisterWorld(GxDynamics::GxWorld* pWorld){ _pRegisterWorld = pWorld; }
891
893 void setActive(b32 active);
895 GX_FORCE_INLINE b32 isActive(void) const { return _activeFlag.isFlag(ACTIVE_FLAG_ACTIVE); }
896
898 constexpr u32 getActiveFlagAll(void) const { return _activeFlag.getFlag(); }
900 GX_FORCE_INLINE b32 getActiveFlag(u32 flag) const { return _activeFlag.isFlag(flag); }
902 GX_FORCE_INLINE void setActiveFlag(u32 flag, b32 value){ return _activeFlag.setFlag(flag, value); }
903
905 GX_FORCE_INLINE virtual GxMatrixAffine getMatrix(void) { return GxMatrixAffine(); }
906
908 constexpr void setManagementClass(GxDynamics * pManagementClass) { _pManagementClass = pManagementClass; }
909
911 constexpr GxDynamics* getManagementClass(void) const { return _pManagementClass; }
912
914 // todo:コールバックの実装
915 GX_FORCE_INLINE virtual void setBreakParam(b32 /*isBrakable*/, f32 /*maxForce*/, f32 /*maxTorque*/) {}
916
918 //-----------------------------------------------------------
920 //-----------------------------------------------------------
922protected:
927
928#if GX_DEVELOP
929 f32 _swingLimit0;
930 f32 _swingLimit1;
931 f32 _twistLimit;
932
933 GxMatrix33 _constraintDirection0;
934 GxMatrix33 _constraintDirection1;
935#endif // GX_DEVELOP
936
938};
939
940//===========================================================================
942//===========================================================================
944{
945 //-----------------------------------------------------------
947 //-----------------------------------------------------------
949public:
950 // RTTI定義
951 GX_RTTI_STRUCT( GxDynamics::GxRigidBodyParam );
952
955 : _mass( 1.f )
956 , _friction(0.5f)
957 , _type( GxObject::RIGID_BODY_TYPE::DYNAMIC )
958 , _inertiaScale(1.f, 1.f, 1.f)
959 , _linearDamping( 0.5f )
960 , _angularDamping( 0.5f )
961 {}
962
964 //-----------------------------------------------------------
966 //-----------------------------------------------------------
968
969 f32 _mass;
970
972
974
975 // 慣性モーメントは、回転運動のしにくさを表現するパラメタで、
976 // 値が大きいほど回転しにくくなります。\n
977 // 値は質量と形状から自動で計算されます。\n
978 // サイズが小さい物体、すなわち慣性モーメントが小さい物体は、
979 // 挙動が不安定になりやすいので、 \n
980 // このスケールを利用して大きめの値になるように設定してください。\n
981 // 0.fを設定した軸方向は回転しなくなるので、
982 // 特定の軸に関してのみ回転運動させたい場合に利用できます。 \n
984
985 // 減衰率に関して、詳しくはGxObject::setDampingRatio()を参照してください。
988
990};
991
992//===========================================================================
993// 判定条件
994//===========================================================================
995class GxDynamics::GxConditionInformation : public gx::core::GxClassBase
996{
997 //-----------------------------------------------------------
999 //-----------------------------------------------------------
1001public:
1002 // RTTI定義
1003 GX_RTTI_CLASS(GxDynamics::GxConditionInformation, gx::core::GxClassBase );
1004 // new, delete定義
1005 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS );
1006
1008 //-----------------------------------------------------------
1010 //-----------------------------------------------------------
1012
1018
1020 //-----------------------------------------------------------
1022 //-----------------------------------------------------------
1024
1032
1034
1036};
1037
1038//===========================================================================
1040//===========================================================================
1042{
1043 //-----------------------------------------------------------
1045 //-----------------------------------------------------------
1047public:
1050 : _pObject(nullptr)
1051 , _triangleIndex(-1)
1052 , _checkFlag(0)
1053 , _fraction( 0.f )
1054 , _hasHit( false )
1055 {}
1057 virtual ~GxRayResult(void) {};
1058
1060 const GxRayResult& operator = (const GxRayResult& rayResult)
1061 {
1062 _position = rayResult._position;
1063 _normal = rayResult._normal;
1064 _pObject = rayResult._pObject;
1065 _triangleIndex = rayResult._triangleIndex;
1066 _checkFlag = rayResult._checkFlag;
1067 _fraction = rayResult._fraction;
1068 _hasHit = rayResult._hasHit;
1069 return *this;
1070 }
1071
1073 //-----------------------------------------------------------
1075 //-----------------------------------------------------------
1077public:
1083 // レイチェックの場合は _pos = start + _fraction * (end - start)
1084 // 値域は0.f<= _fraction <= 1.f
1085 //
1086 // カプセルチェックの場合は
1087 // start + _fraction * (end - start)
1088 // に球を置くと_posに接するような最小の値が_fractionとなる。
1089 // 値域は0.f< _fraction <= 1.f
1092
1094};
1095
1096//===========================================================================
1098//===========================================================================
1100{
1101 //-------------------------------------------------------------------
1103 //-------------------------------------------------------------------
1105public:
1106 GX_RTTI_CLASS(GxShapeDynamicsCompound, GxShape);
1107 // new, delete定義
1108 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS );
1109
1111 //-----------------------------------------------------------
1113 //-----------------------------------------------------------
1115
1120
1122 //-----------------------------------------------------------
1124 //-----------------------------------------------------------
1126
1128 const GxVector3 getNormal(const GxVector3& /*position*/) const override { return GxVector3::ZERO; }
1130 GX_FORCE_INLINE GxArray* getListDesc( void ) { return &_listDesc; }
1131
1133 //-----------------------------------------------------------
1135 //-----------------------------------------------------------
1137protected:
1139
1141};
1142
1143GX_PHYSICS_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
@ PHYSICS
物理
#define DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE
物理演算の汎用的な最大プールサイズデフォルト値
Definition GxDynamics.h:17
#define DYNAMICS_COLLISION_MARGIN
物理演算のコリジョンマージン
Definition GxDynamics.h:15
#define DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE
物理演算のスタックアロケーターサイズデフォルト値
Definition GxDynamics.h:16
#define DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE
物理演算のコリジョンアルゴリズム用最大プールサイズデフォルト値
Definition GxDynamics.h:18
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
PRIMITIVE_FILL_MODE
塗りつぶしモード
Definition GxPrimitive.h:31
@ WIRE
ワイヤーフレーム
メモリアロケータリスト
Definition GxAllocator.h:347
@ PHYSICS
物理エンジン
配列クラス
Definition GxArrayClassBase.h:18
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
基底クラス
Definition GxBase.h:51
COLLISION_SHAPE
コリジョン形状
Definition GxCollision.h:38
Definition GxDynamics.h:996
s32 _groupFlag
グループフラグ
Definition GxDynamics.h:1031
u32 _checkFlag
チェックフラグ
Definition GxDynamics.h:1033
GxConditionInformation(void)
コンストラクタ
Definition GxDynamics.h:1014
GxDynamics 拘束クラス
Definition GxDynamics.h:783
virtual GX_FORCE_INLINE b32 createConstraintSpherical(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxVector3 &, const GxVector3 &, b32)
Definition GxDynamics.h:843
GxDynamics * _pManagementClass
自分を管理しているクラス
Definition GxDynamics.h:926
virtual GX_FORCE_INLINE b32 createConstraintRevolute(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxMatrixAffine &, const GxMatrixAffine &, b32)
Definition GxDynamics.h:847
GX_FORCE_INLINE void setActiveFlag(u32 flag, b32 value)
アクティブフラグ設定
Definition GxDynamics.h:902
constexpr GxDynamics * getManagementClass(void) const
管理クラスの取得
Definition GxDynamics.h:911
virtual GX_FORCE_INLINE void setBreakParam(b32, f32, f32)
壊れパラメタ設定
Definition GxDynamics.h:915
constexpr void setManagementClass(GxDynamics *pManagementClass)
管理クラスのセット
Definition GxDynamics.h:908
constexpr TYPE getType(void) const
拘束タイプの取得
Definition GxDynamics.h:884
GX_FORCE_INLINE b32 isActive(void) const
アクティブ取得
Definition GxDynamics.h:895
constexpr u32 getActiveFlagAll(void) const
全アクティブフラグ取得
Definition GxDynamics.h:898
TYPE
拘束タイプ
Definition GxDynamics.h:809
@ REVOLUTE
ヒンジタイプ(1軸周りの回転のみ可能)
@ CONE_TWIST
コーンツイストタイプの拘束(可動範囲を指定できるボールソケット)
@ _6DOF
3軸の回転および平行移動を自由に設定できるフリーな拘束
@ SPHERICAL
ボールソケットタイプ(回転運動のみ可能)
@ POINT_IN_PLANE
2方向直線運動+自由回転
@ PRISMATIC
1方向直線運動のみ可能なタイプ
@ POINT_ON_LINE
1方向直線運動+自由回転
@ PULLEY
滑車間のロープのような拘束
virtual GX_FORCE_INLINE GxMatrixAffine getMatrix(void)
マトリクスを取得
Definition GxDynamics.h:905
constexpr GxDynamics::GxWorld * getRegisterWorld(void) const
登録したワールドのアドレスを取得
Definition GxDynamics.h:887
TYPE _type
拘束タイプ
Definition GxDynamics.h:924
virtual GX_FORCE_INLINE b32 createConstraintRevolute(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxVector3 &, const GxVector3 &, const GxVector3 &, const GxVector3 &, const GxVector3 &, const GxVector3 &, b32)
回転軸タイプの拘束作成(軸指定)
Definition GxDynamics.h:849
void setActive(b32 active)
アクティブ設定
Definition GxDynamics.cpp:1610
virtual void prepareCheck(void)
当たり判定チェック前準備
Definition GxDynamics.cpp:1582
virtual GX_FORCE_INLINE b32 createConstraintConeTwist(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxMatrixAffine &, const GxMatrixAffine &, const GxParamConeTwist &)
ConeTwistタイプの拘束作成
Definition GxDynamics.h:852
GxConstraint(void)
デフォルトコンストラクタ
Definition GxDynamics.cpp:1564
virtual void initialize(b32 active, TYPE type, b32 disableCollisions)
拘束情報の初期化
Definition GxDynamics.cpp:1635
virtual GX_FORCE_INLINE b32 createConstraintFixed(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxVector3 &, const GxVector3 &)
固定タイプの拘束作成
Definition GxDynamics.h:855
virtual GX_FORCE_INLINE void setParameterRevolute(const f32, const f32)
回転軸タイプのパラメタを設定
Definition GxDynamics.h:861
@ ACTIVE_FLAG_REQUEST_REGISTER
アクティブフラグON登録待ち
Definition GxDynamics.h:801
@ ACTIVE_FLAG_REGISTERED
登録されているかどうか
Definition GxDynamics.h:800
@ ACTIVE_FLAG_ACTIVE
オブジェクトがアクティブ状態かどうか
Definition GxDynamics.h:799
@ ACTIVE_FLAG_REQUEST_LINKED_BODIES
剛体同士をつなげるかどうか
Definition GxDynamics.h:803
@ ACTIVE_FLAG_REQUEST_BAN
アクティブフラグOFF登録待ち
Definition GxDynamics.h:802
@ ACTIVE_FLAG_REQUEST_DELETE
オブジェクト削除待ち
Definition GxDynamics.h:804
GX_FORCE_INLINE b32 getActiveFlag(u32 flag) const
アクティブフラグ取得
Definition GxDynamics.h:900
GxDynamics::GxWorld * _pRegisterWorld
登録先ワールド
Definition GxDynamics.h:925
GxFlag32Bit _activeFlag
アクティブ設定用フラグ
Definition GxDynamics.h:923
constexpr void setRegisterWorld(GxDynamics::GxWorld *pWorld)
登録したワールドのアドレスをセット
Definition GxDynamics.h:890
constexpr void reset(void)
状態リセット
Definition GxDynamics.h:875
~GxConstraint(void) override
デストラクタ
Definition GxDynamics.h:833
GxDynamics基本オブジェクトクラス
Definition GxDynamics.h:519
@ ACTIVE_FLAG_REQUEST_DELETE
オブジェクト削除待ち
Definition GxDynamics.h:539
@ ACTIVE_FLAG_REQUEST_REGISTER
アクティブフラグON登録待ち
Definition GxDynamics.h:537
@ ACTIVE_FLAG_REQUEST_BAN
アクティブフラグOFF登録待ち
Definition GxDynamics.h:538
@ ACTIVE_FLAG_REGISTERED
登録されているかどうか
Definition GxDynamics.h:536
@ ACTIVE_FLAG_ACTIVE
オブジェクトがアクティブ状態かどうか
Definition GxDynamics.h:535
b32 _isOwnsBtShape
自分が作成したBULLETのシェイプかどうかのフラグ
Definition GxDynamics.h:768
virtual GX_FORCE_INLINE void getLinearVelocity(GxVector3 &)
直線速度取得[m/sec]
Definition GxDynamics.h:643
RIGID_BODY_TYPE
剛体タイプ定義
Definition GxDynamics.h:544
@ KINEMATIC
移動ありのコリジョン用
@ STATIC
移動なしのコリジョン用
RIGID_BODY_TYPE _type
剛体タイプ
Definition GxDynamics.h:765
u32 _checkFlag
メッシュとのチェックフラグ
Definition GxDynamics.h:773
GxQuaternion _rotateOffset
角度オフセット
Definition GxDynamics.h:772
virtual GX_FORCE_INLINE b32 createMultisphere(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeMultisphere &, const GxRigidBodyParam &, f32)
マルチ球の作成
Definition GxDynamics.h:602
constexpr GxCollision::COLLISION_SHAPE getShapeType(void) const
オブジェクト形状タイプの取得
Definition GxDynamics.h:689
virtual GX_FORCE_INLINE void setPosition(const GxVector3 &)
座標設定(速度等のパラメタが変更されるわけではないことに注意)
Definition GxDynamics.h:651
virtual GX_FORCE_INLINE void postUpdate(void)
更新後処理
Definition GxDynamics.h:581
constexpr void setRegisterWorld(GxDynamics::GxWorld *pWorld)
登録したワールドのアドレスを設定
Definition GxDynamics.h:682
constexpr GxShape * getShape(void) const
オブジェクト形状の取得
Definition GxDynamics.h:687
virtual b32 isNeedCheck(GxObject *pCollisionObject)
お互いの当たり判定が必要か判定
Definition GxDynamics.cpp:1449
virtual GX_FORCE_INLINE void setMatrix(const GxMatrixAffine &)
マトリクス設定
Definition GxDynamics.h:692
GxMatrixAffine * _pMatrix
更新するマトリクス
Definition GxDynamics.h:763
virtual GX_FORCE_INLINE b32 addCompoundBox(const GxVector3 &, const GxQuaternion &, const GxShapeBox &)
複合オブジェクトに追加:箱
Definition GxDynamics.h:619
virtual GX_FORCE_INLINE b32 endAddCompound(b32, const GxRigidBodyParam &)
複合オブジェクト追加終了
Definition GxDynamics.h:625
f32 _mass
重さ
Definition GxDynamics.h:770
GX_FORCE_INLINE void setActiveFlag(u32 flag, b32 value)
アクティブフラグ設定
Definition GxDynamics.h:714
virtual GX_FORCE_INLINE void getQuaternion(GxQuaternion &)
姿勢取得
Definition GxDynamics.h:658
virtual GX_FORCE_INLINE b32 addCompoundConvex(const GxVector3 &, const GxQuaternion &, const GxVector3 *, u32)
複合オブジェクトに追加:凸形状
Definition GxDynamics.h:623
virtual GX_FORCE_INLINE void preUpdate(void)
更新前処理
Definition GxDynamics.h:579
virtual GX_FORCE_INLINE b32 addCompoundCapsule(const GxVector3 &, const GxQuaternion &, const GxShapeCapsule &)
複合オブジェクトに追加:カプセル
Definition GxDynamics.h:621
GxDynamics::GxWorld * _pRegisterWorld
登録先ワールド
Definition GxDynamics.h:766
virtual GX_FORCE_INLINE b32 createBox(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeBox &, const GxRigidBodyParam &, f32)
箱の作成
Definition GxDynamics.h:596
virtual GX_FORCE_INLINE void applyForce(const GxVector3 &, const GxVector3 &)
力を加える(加速度に影響)
Definition GxDynamics.h:587
constexpr GxUnitBase * getUnit(void) const
ユニット取得
Definition GxDynamics.h:719
virtual GX_FORCE_INLINE void setDeactivationTime(f32)
Definition GxDynamics.h:669
s32 _jointIndex
貼り付ける関節番号
Definition GxDynamics.h:764
virtual GX_FORCE_INLINE GxMatrixAffine getMatrix(void)
マトリクス取得
Definition GxDynamics.h:694
virtual GX_FORCE_INLINE b32 createCylinder(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeCylinder &, const GxRigidBodyParam &, f32)
円柱の作成
Definition GxDynamics.h:599
constexpr u32 getCheckFlag(void) const
チェックフラグの取得
Definition GxDynamics.h:722
GX_FORCE_INLINE b32 isActive(void) const
アクティブ判定
Definition GxDynamics.h:707
virtual GX_FORCE_INLINE void applyImpulse(const GxVector3 &, const GxVector3 &)
衝撃力を加える(速度に影響)
Definition GxDynamics.h:590
constexpr void setUnit(GxUnitBase *pUnit)
ユニット設定
Definition GxDynamics.h:717
GxVector3 _offset
位置オフセット
Definition GxDynamics.h:771
constexpr f32 getMass(void) const
質量を取得
Definition GxDynamics.h:738
virtual GX_FORCE_INLINE b32 createCapsule(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeCapsule &, const GxRigidBodyParam &, f32)
カプセルの作成
Definition GxDynamics.h:605
virtual GX_FORCE_INLINE void initialize(b32, GxMatrixAffine *, const GxVector3 &, const GxQuaternion &)
オブジェクトの初期化
Definition GxDynamics.h:567
~GxObject(void) override
デストラクタ
Definition GxDynamics.cpp:1391
virtual GX_FORCE_INLINE void setAngularVelocity(const GxVector3 &)
回転速度設定[m/sec]
Definition GxDynamics.h:646
GX_FORCE_INLINE b32 getActiveFlag(u32 flag) const
アクティブフラグ取得
Definition GxDynamics.h:712
constexpr void setManagementClass(GxDynamics *pManagementClass)
管理クラスの設定
Definition GxDynamics.h:729
GxUnitBase * _pUnit
所有するユニット
Definition GxDynamics.h:767
virtual GX_FORCE_INLINE b32 createConvexShape(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxVector3 *, u32, const GxRigidBodyParam &, f32)
凸形状の作成
Definition GxDynamics.h:608
virtual b32 isHitCheckFlagTrimesh(u32 triangleIndex, u32 targetFlag)
メッシュ形状の三角形単位で、チェックフラグから当たり判定が必要かを調べる
Definition GxDynamics.cpp:1491
GxShape * _pShape
基本形状
Definition GxDynamics.h:761
GX_FORCE_INLINE void setRotateOffset(const GxQuaternion &offset)
ラジアンの設定
Definition GxDynamics.h:743
constexpr GxDynamics::GxWorld * getRegisterWorld(void) const
登録したワールドのアドレスを取得
Definition GxDynamics.h:684
virtual GX_FORCE_INLINE void setFriction(f32)
摩擦係数の設定
Definition GxDynamics.h:676
virtual void setActive(b32 active)
アクティブ設定
Definition GxDynamics.cpp:1425
GxCollision::COLLISION_SHAPE _shapeType
形状分類
Definition GxDynamics.h:762
GxDynamics * _pManagementClass
自分を管理しているクラス
Definition GxDynamics.h:769
virtual GX_FORCE_INLINE void getPosition(GxVector3 &)
座標取得
Definition GxDynamics.h:653
virtual void prepareCheck(void)
当たり判定チェック前準備
Definition GxDynamics.cpp:1398
GX_FORCE_INLINE void setOffset(const GxVector3 &offset)
オフセットの設定
Definition GxDynamics.h:736
GxFlag32Bit _activeFlag
アクティブ設定用フラグ
Definition GxDynamics.h:760
constexpr u32 getActiveFlagAll(void) const
全アクティブフラグ取得
Definition GxDynamics.h:710
virtual GX_FORCE_INLINE void setRestitution(f32)
反発係数の設定(有効値:0.f~1.f)
Definition GxDynamics.h:679
virtual b32 isHitCheckFlag(u32 targetFlag)
チェックフラグからあたり判定が必要かを調べる
Definition GxDynamics.cpp:1479
virtual GX_FORCE_INLINE b32 createCompoundObject(GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, f32)
複合形状の作成
Definition GxDynamics.h:611
s16 _group
グループ
Definition GxDynamics.h:774
constexpr s32 getJointIndex(void) const
貼り付ける関節番号取得
Definition GxDynamics.h:702
virtual GX_FORCE_INLINE void setSleepingThresholds(f32, f32)
Definition GxDynamics.h:673
virtual GX_FORCE_INLINE void reset(void)
状態リセット
Definition GxDynamics.h:584
GX_FORCE_INLINE const GxQuaternion & getRotateOffset(void) const
ラジアンの取得
Definition GxDynamics.h:741
virtual GX_FORCE_INLINE b32 addCompoundSphere(const GxVector3 &, const GxShapeSphere &)
複合オブジェクトに追加:球
Definition GxDynamics.h:617
virtual GX_FORCE_INLINE b32 createMesh(b32, GxMatrixAffine *, const GxVector3 &, const GxQuaternion &, const GxShapeTrimesh &, f32=0.5f, b32=true, GxVector3 *=nullptr, GxVector3 *=nullptr, f32=DYNAMICS_COLLISION_MARGIN)
背景メッシュの作成
Definition GxDynamics.h:614
virtual GX_FORCE_INLINE b32 createSphere(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeSphere &, const GxRigidBodyParam &, f32)
球の作成
Definition GxDynamics.h:593
virtual GX_FORCE_INLINE void getAngularVelocity(GxVector3 &)
回転速度取得[m/sec]
Definition GxDynamics.h:648
virtual GX_FORCE_INLINE void setLinearVelocity(const GxVector3 &)
直線速度設定[m/sec]
Definition GxDynamics.h:641
constexpr void setCheckFlag(u32 flag)
チェックフラグの設定
Definition GxDynamics.h:724
constexpr RIGID_BODY_TYPE getType(void) const
剛体の種類を取得
Definition GxDynamics.h:726
virtual GX_FORCE_INLINE void setQuaternion(const GxQuaternion &)
姿勢設定(速度等のパラメタが変更されるわけではないことに注意)
Definition GxDynamics.h:656
constexpr GxDynamics * getManagementClass(void) const
管理クラスの取得
Definition GxDynamics.h:731
GX_FORCE_INLINE const GxVector3 & getOffset(void) const
オフセットの取得
Definition GxDynamics.h:734
virtual GX_FORCE_INLINE void setDampingRatio(f32, f32)
Definition GxDynamics.h:664
GxObject(void)
デフォルトコンストラクタ
Definition GxDynamics.cpp:1370
GxDynamics 基本ワールドクラス
Definition GxDynamics.h:272
GX_FORCE_INLINE void getPropertyList(void *const pValue, u32 index)
再生クラスアドレスの取得
Definition GxDynamics.h:479
virtual void preUpdate(void)
更新前処理
Definition GxDynamics.cpp:949
virtual void postUpdate(void)
更新後処理
Definition GxDynamics.cpp:962
constexpr void setPropertyList(const void *const, u32)
再生クラスアドレスの設定
Definition GxDynamics.h:481
virtual GX_FORCE_INLINE void setGravity(const f32, const f32, const f32)
重力を設定(ワールドに登録されている剛体全てに設定)
Definition GxDynamics.h:368
virtual GX_FORCE_INLINE void banObject(GxDynamics::GxObject *)
ワールドからオブジェクトを登録解除
Definition GxDynamics.h:344
b32 setListClassCount(u32 count)
リスト個数設定
Definition GxDynamics.cpp:1218
GxDynamics::GxObject * getMesh(u32 index)
メッシュアドレスの取得
Definition GxDynamics.cpp:1162
virtual void setGravity(const GxVector3 &gravity=GxDynamics::GxWorld::DYNAMICS_GRAVITY)
重力を設定(ワールドに登録されている剛体全てに設定)
Definition GxDynamics.cpp:1037
void setGroupCollision(u16 group1, u16 group2, b32 isColide)
グループの衝突判定を行うか設定
Definition GxDynamics.cpp:1281
constexpr u32 getListClassCount(void) const
リスト個数取得
Definition GxDynamics.h:439
~GxWorld(void) override
デストラクタ
Definition GxDynamics.cpp:850
b32 setMeshCount(u32 count)
メッシュ登録個数設定
Definition GxDynamics.cpp:1061
void freeMesh(void)
メッシュリストの解放
Definition GxDynamics.cpp:1090
u32 _groupCollide[32]
ワールドに設定された、グループ同士の衝突判定の有無を保持する。
Definition GxDynamics.h:510
GX_FORCE_INLINE void setEnableMaxTimeStep(b32 enable)
ワールド更新間隔設定を反映可能にする(デフォルト無効)
Definition GxDynamics.h:391
u32 getActiveMeshCount(void)
アクティブな個数の取得
Definition GxDynamics.cpp:1179
virtual b32 checkRayClosestVsWorld(GxDynamics::GxRayResult *, const GxVector3 &, const GxVector3 &, GxConditionInformation *=nullptr)
Definition GxDynamics.h:433
GX_FORCE_INLINE b32 isActive(void) const
アクティブ判定
Definition GxDynamics.h:360
u32 getFreeMeshIndex(void)
空いているメッシュインデックスを取得
Definition GxDynamics.cpp:1198
constexpr u32 getMeshCount(void) const
メッシュオブジェクト個数の取得
Definition GxDynamics.h:412
void addClass(u32 threadIndex, GxDynamics *pDynamics)
クラス登録
Definition GxDynamics.cpp:980
b32 _enableMaxTimeStep
外部からシミュレーション設定を有効にする
Definition GxDynamics.h:507
GX_FORCE_INLINE void setActive(b32 active)
アクティブ設定
Definition GxDynamics.h:358
virtual void check(void)
Definition GxDynamics.cpp:928
virtual void prepareCheck(void)
当たり判定チェック前準備
Definition GxDynamics.cpp:900
GxWorld(void)
デフォルトコンストラクタ
Definition GxDynamics.cpp:830
b32 addMesh(u32 index, GxDynamics::GxObject *pMesh)
メッシュをリストに追加
Definition GxDynamics.cpp:1103
virtual GX_FORCE_INLINE void registerConstraint(GxDynamics::GxConstraint *, b32)
ワールドに拘束クラスを登録
Definition GxDynamics.h:347
u32 _maxIteration
最大繰り返し回数
Definition GxDynamics.h:509
void detachClass(GxDynamics *pDynamics)
クラス削除
Definition GxDynamics.cpp:1000
virtual GX_FORCE_INLINE void detachObjectFromWorld(GxObject *)
ワールドからオブジェクトをデタッチ
Definition GxDynamics.h:394
virtual void update(void)
更新処理
Definition GxDynamics.h:335
virtual b32 checkRayClosestVsSingle(GxDynamics::GxRayResult *, GxObject *, const GxVector3 &, const GxVector3 &, GxConditionInformation *=nullptr)
指定オブジェクトとのレイチェック
Definition GxDynamics.h:436
virtual GX_FORCE_INLINE void registerObject(GxDynamics::GxObject *)
ワールドにオブジェクトを登録
Definition GxDynamics.h:342
f32 _timeStep
タイムステップの最大時間
Definition GxDynamics.h:508
GxArrayClassBase * getListClass(u32 index)
リストの取得
Definition GxDynamics.cpp:1246
void setMaxTimeStep(f32 timeStep=1.0f/60.f, u32 maxIteration=8)
Definition GxDynamics.cpp:1047
GX_FORCE_INLINE void setPropListClassCount(u32 count)
リスト個数設定
Definition GxDynamics.h:484
virtual GX_FORCE_INLINE void reset(void)
ワールドの状態をリセットする
Definition GxDynamics.h:363
static const GxVector3 DYNAMICS_GRAVITY
重力
Definition GxDynamics.h:286
b32 eraseMesh(GxDynamics::GxObject *pMesh)
メッシュをリストから削除(アドレス指定版)
Definition GxDynamics.cpp:1130
virtual GX_FORCE_INLINE void banConstraint(GxDynamics::GxConstraint *)
ワールドから拘束クラスを登録解除
Definition GxDynamics.h:349
virtual b32 alloc(u32 meshCount, const GxVector3 &worldAabbMin, const GxVector3 &worldAabbMax, u16 maxHandles, u32 stackAllocatorSize=DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE, u32 maxPersistentManifoldPoolSize=DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE, u32 maxCollisionAlgorithmPoolSize=DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE)
ワールドのメモリ確保
Definition GxDynamics.cpp:880
virtual void free(void)
ワールドのメモリ解放
Definition GxDynamics.cpp:888
GxArrayClassBase _dynamicsList
GxDynamicsクラスを記憶するリスト
Definition GxDynamics.h:506
物理演算クラス
Definition GxDynamics.h:27
GxUnitBase * _pUnit
使用するユニット
Definition GxDynamics.h:263
GX_FORCE_INLINE b32 isActive(void) const
アクティブ判定
Definition GxDynamics.h:162
static constexpr u32 FLAG_ALL
全フラグ定数
Definition GxDynamics.h:53
void(GxClassBaseRoot::*) DYNAMICS_CALLBACK(void)
後処理用コールバック
Definition GxDynamics.h:97
constexpr GxWorld * getWorld(void) const
登録ワールドの取得
Definition GxDynamics.h:217
GxWorld * _pRegisterWorld
オブジェクトを登録するワールド
Definition GxDynamics.h:262
GX_FORCE_INLINE void setCallback(DYNAMICS_CALLBACK pCallback)
後処理用コールバック関数の設定
Definition GxDynamics.h:225
b32 _active
クラスを使用できるかフラグ
Definition GxDynamics.h:257
GxArrayClassBase _listConstraint
拘束クラスのリスト
Definition GxDynamics.h:260
GxArrayClassBase _listObject
オブジェクトのリスト
Definition GxDynamics.h:259
virtual GX_FORCE_INLINE GxObject * allocObject(void)
オブジェクトのメモリ確保
Definition GxDynamics.h:120
DYNAMICS_CALLBACK _pCallback
後処理用コールバック
Definition GxDynamics.h:258
constexpr void setWorldNull(void)
登録ワールドの削除
Definition GxDynamics.h:221
static constexpr u32 VALUE_16
16
Definition GxMath.h:123
箱形状クラス
Definition GxShape.h:333
カプセル形状クラス
Definition GxShape.h:707
円柱形状クラス
Definition GxShape.h:634
複合形状クラス
Definition GxDynamics.h:1100
GX_FORCE_INLINE GxArray * getListDesc(void)
詳細リストを取得
Definition GxDynamics.h:1130
~GxShapeDynamicsCompound(void) override
デストラクタ
Definition GxDynamics.h:1119
GxShapeDynamicsCompound(void)
デフォルトコンストラクタ
Definition GxDynamics.h:1117
GxArray _listDesc
詳細リスト
Definition GxDynamics.h:1138
const GxVector3 getNormal(const GxVector3 &) const override
表面位置から法線を取得
Definition GxDynamics.h:1128
形状基礎クラス
Definition GxShape.h:45
マルチ球形状クラス
Definition GxShape.h:776
球形状クラス
Definition GxShape.h:240
三角メッシュ形状クラス
Definition GxShape.h:912
ユニット基礎クラス
Definition GxUnitBase.h:45
Definition GxColor.h:21
static const GxColor WHITE
Definition GxColor.h:37
ConeTwist設定パラメタ構造体
Definition GxDynamics.h:57
f32 _swingLimit1
振れ角度限界:mat.getRow(1)方向
Definition GxDynamics.h:89
~GxParamConeTwist(void)
デストラクタ
Definition GxDynamics.h:80
b32 _disableCollision
2オブジェクト間のコリジョンを無視するならtrue
Definition GxDynamics.h:91
f32 _swingLimit2
振れ角度限界:mat.getRow(2)方向
Definition GxDynamics.h:90
GxParamConeTwist()
デフォルトコンストラクタ
Definition GxDynamics.h:73
f32 _twistLimit
ねじり角度限界:mat.getRow(0)方向
Definition GxDynamics.h:88
レイ判定情報
Definition GxDynamics.h:1042
GxVector3 _normal
交差面法線
Definition GxDynamics.h:1079
u32 _checkFlag
チェックフラグ?
Definition GxDynamics.h:1082
f32 _fraction
交差位置の割合
Definition GxDynamics.h:1090
GxVector3 _position
交差位置
Definition GxDynamics.h:1078
GxRayResult(void)
コンストラクタ
Definition GxDynamics.h:1049
b32 _hasHit
ヒットしたかどうか
Definition GxDynamics.h:1091
s32 _triangleIndex
交差したメッシュのインデックス
Definition GxDynamics.h:1081
virtual ~GxRayResult(void)
デストラクタ
Definition GxDynamics.h:1057
GxDynamics::GxObject * _pObject
交差オブジェクト
Definition GxDynamics.h:1080
const GxRayResult & operator=(const GxRayResult &rayResult)
代入
Definition GxDynamics.h:1060
剛体パラメタ構造体
Definition GxDynamics.h:944
f32 _linearDamping
直線運動減衰率
Definition GxDynamics.h:986
f32 _angularDamping
回転運動減衰率
Definition GxDynamics.h:987
GxObject::RIGID_BODY_TYPE _type
剛体タイプ
Definition GxDynamics.h:973
GxRigidBodyParam(void)
デフォルトコンストラクタ
Definition GxDynamics.h:954
GxVector3 _inertiaScale
慣性モーメントのスケール
Definition GxDynamics.h:983
f32 _mass
質量:0.fにすると、動かないオブジェクトになります。
Definition GxDynamics.h:969
f32 _friction
摩擦係数
Definition GxDynamics.h:971
constexpr u32 getFlag(void) const
フラグ直取得
Definition GxStruct.h:1273
ビット指定型フラグ
Definition GxStruct.h:1338
GX_FORCE_INLINE b32 isFlag(u32 flag) const
フラグ判定
Definition GxStruct.h:1354
GX_FORCE_INLINE void setFlag(u32 flag, b32 enable)
フラグ設定
Definition GxStruct.h:1356
3×3行列(行優先)
Definition GxMatrix.h:169
アフィン変換行列(行優先)
Definition GxMatrix.h:330
クォータニオン
Definition GxQuaternion.h:19
Definition GxBase.h:24
3次元ベクトル
Definition GxVector.h:245
static const GxVector3 ZERO
(0, 0, 0)
Definition GxVector.h:256
32bitブーリアン
Definition GxDefine.h:173