mirror of
https://github.com/bloeys/physx-go.git
synced 2025-12-29 07:58:20 +00:00
Rigiddynamic CMass+Shape local poses
This commit is contained in:
12
main.go
12
main.go
@ -68,11 +68,20 @@ func main() {
|
|||||||
s.AddActor(dynCapsule.ToActor())
|
s.AddActor(dynCapsule.ToActor())
|
||||||
|
|
||||||
//Add compound shape
|
//Add compound shape
|
||||||
|
|
||||||
dynComp := p.CreateRigidDynamic(pgo.NewTransform(pgo.NewVec3(0, 35, 0), qID))
|
dynComp := p.CreateRigidDynamic(pgo.NewTransform(pgo.NewVec3(0, 35, 0), qID))
|
||||||
pgo.CreateExclusiveShape(dynComp.ToRigidActor(), pgo.NewSphereGeometry(2).ToGeometry(), pMat, pgo.ShapeFlags_eSCENE_QUERY_SHAPE|pgo.ShapeFlags_eSIMULATION_SHAPE|pgo.ShapeFlags_eVISUALIZATION)
|
|
||||||
pgo.CreateExclusiveShape(dynComp.ToRigidActor(), pgo.NewBoxGeometry(10, 0.1, 0.1).ToGeometry(), pMat, pgo.ShapeFlags_eSCENE_QUERY_SHAPE|pgo.ShapeFlags_eSIMULATION_SHAPE|pgo.ShapeFlags_eVISUALIZATION)
|
pgo.CreateExclusiveShape(dynComp.ToRigidActor(), pgo.NewBoxGeometry(10, 0.1, 0.1).ToGeometry(), pMat, pgo.ShapeFlags_eSCENE_QUERY_SHAPE|pgo.ShapeFlags_eSIMULATION_SHAPE|pgo.ShapeFlags_eVISUALIZATION)
|
||||||
|
|
||||||
|
someShape := pgo.CreateExclusiveShape(dynComp.ToRigidActor(), pgo.NewSphereGeometry(2).ToGeometry(), pMat, pgo.ShapeFlags_eSCENE_QUERY_SHAPE|pgo.ShapeFlags_eSIMULATION_SHAPE|pgo.ShapeFlags_eVISUALIZATION)
|
||||||
|
someShape.SetLocalPose(pgo.NewTransform(pgo.NewVec3(5, 0, 0), qID))
|
||||||
|
|
||||||
|
someShape = pgo.CreateExclusiveShape(dynComp.ToRigidActor(), pgo.NewSphereGeometry(2).ToGeometry(), pMat, pgo.ShapeFlags_eSCENE_QUERY_SHAPE|pgo.ShapeFlags_eSIMULATION_SHAPE|pgo.ShapeFlags_eVISUALIZATION)
|
||||||
|
someShape.SetLocalPose(pgo.NewTransform(pgo.NewVec3(-5, 0, 0), qID))
|
||||||
|
|
||||||
s.AddActor(dynComp.ToActor())
|
s.AddActor(dynComp.ToActor())
|
||||||
|
|
||||||
|
//Make some changes and print info
|
||||||
dynSphere.SetMass(1)
|
dynSphere.SetMass(1)
|
||||||
dynCapsule.SetMass(1)
|
dynCapsule.SetMass(1)
|
||||||
println("Box 1 mass:", dynBox.GetMass())
|
println("Box 1 mass:", dynBox.GetMass())
|
||||||
@ -84,6 +93,7 @@ func main() {
|
|||||||
dynCapsule.SetLinearDamping(0.05)
|
dynCapsule.SetLinearDamping(0.05)
|
||||||
println("Capsule linear damping B:", dynCapsule.GetLinearDamping())
|
println("Capsule linear damping B:", dynCapsule.GetLinearDamping())
|
||||||
|
|
||||||
|
//Run simulation
|
||||||
s.SetScratchBuffer(4)
|
s.SetScratchBuffer(4)
|
||||||
for {
|
for {
|
||||||
s.Simulate(1 / 60.0)
|
s.Simulate(1 / 60.0)
|
||||||
|
|||||||
Binary file not shown.
10
pgo/pgo.go
10
pgo/pgo.go
@ -157,6 +157,16 @@ type Shape struct {
|
|||||||
cShape C.struct_CPxShape
|
cShape C.struct_CPxShape
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Shape) GetLocalPose() *Transform {
|
||||||
|
return &Transform{
|
||||||
|
cT: C.CPxShape_getLocalPose(&s.cShape),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Shape) SetLocalPose(tr *Transform) {
|
||||||
|
C.CPxShape_setLocalPose(&s.cShape, &tr.cT)
|
||||||
|
}
|
||||||
|
|
||||||
func CreateExclusiveShape(rigidActor RigidActor, geom *Geometry, mat *Material, shapeFlags ShapeFlags) Shape {
|
func CreateExclusiveShape(rigidActor RigidActor, geom *Geometry, mat *Material, shapeFlags ShapeFlags) Shape {
|
||||||
return Shape{
|
return Shape{
|
||||||
cShape: C.createExclusiveShape(rigidActor.cRa, geom.cG, mat.cM, uint32(shapeFlags)),
|
cShape: C.createExclusiveShape(rigidActor.cRa, geom.cG, mat.cM, uint32(shapeFlags)),
|
||||||
|
|||||||
@ -47,6 +47,9 @@ extern "C" {
|
|||||||
CPxAPI CSTRUCT CPxTransform CPxRigidDynamic_getGlobalPose(CSTRUCT CPxRigidDynamic* crd);
|
CPxAPI CSTRUCT CPxTransform CPxRigidDynamic_getGlobalPose(CSTRUCT CPxRigidDynamic* crd);
|
||||||
CPxAPI void CPxRigidDynamic_setGlobalPose(CSTRUCT CPxRigidDynamic* crd, CSTRUCT CPxTransform* tr, bool autoAwake);
|
CPxAPI void CPxRigidDynamic_setGlobalPose(CSTRUCT CPxRigidDynamic* crd, CSTRUCT CPxTransform* tr, bool autoAwake);
|
||||||
|
|
||||||
|
CPxAPI CSTRUCT CPxTransform CPxRigidDynamic_getCMassLocalPose(CSTRUCT CPxRigidDynamic* crd);
|
||||||
|
CPxAPI void CPxRigidDynamic_setCMassLocalPose(CSTRUCT CPxRigidDynamic* crd, CSTRUCT CPxTransform* tr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
#ifndef CPxShape_H
|
#ifndef CPxShape_H
|
||||||
#define CPxShape_H
|
#define CPxShape_H
|
||||||
|
|
||||||
|
#include "CPxTransform.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -10,6 +12,9 @@ extern "C" {
|
|||||||
void* obj;
|
void* obj;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CPxAPI void CPxShape_setLocalPose(CSTRUCT CPxShape* cs, CSTRUCT CPxTransform* tr);
|
||||||
|
CPxAPI CSTRUCT CPxTransform CPxShape_getLocalPose(CSTRUCT CPxShape* cs);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -95,6 +95,16 @@ func (rd *RigidDynamic) SetGlobalPose(tr *Transform, autoAwake bool) {
|
|||||||
C.CPxRigidDynamic_setGlobalPose(rd.cRd, &tr.cT, C._Bool(autoAwake))
|
C.CPxRigidDynamic_setGlobalPose(rd.cRd, &tr.cT, C._Bool(autoAwake))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rd *RigidDynamic) GetCMassLocalPose() *Transform {
|
||||||
|
return &Transform{
|
||||||
|
cT: C.CPxRigidDynamic_getCMassLocalPose(rd.cRd),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rd *RigidDynamic) SetCMassLocalPose(tr *Transform) {
|
||||||
|
C.CPxRigidDynamic_setCMassLocalPose(rd.cRd, &tr.cT)
|
||||||
|
}
|
||||||
|
|
||||||
func (rd *RigidDynamic) ToActor() Actor {
|
func (rd *RigidDynamic) ToActor() Actor {
|
||||||
return Actor{
|
return Actor{
|
||||||
cA: C.CPxRigidDynamic_toCPxActor(rd.cRd),
|
cA: C.CPxRigidDynamic_toCPxActor(rd.cRd),
|
||||||
|
|||||||
Reference in New Issue
Block a user