From 832f16f3fea92e10bca7e6d223798968042d8a3d Mon Sep 17 00:00:00 2001 From: bloeys Date: Mon, 14 Feb 2022 00:13:24 +0400 Subject: [PATCH] Support split sim --- main.go | 8 +++++--- pgo/libs/libphysx-c.a | Bin 20704 -> 21356 bytes pgo/pgo.go | 17 ++++++++++++++--- pgo/physx-c/CPxScene.h | 3 +++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index f9aa2ad..59a8839 100755 --- a/main.go +++ b/main.go @@ -38,7 +38,7 @@ func main() { groundPlane := pgo.CreatePlane(p, pgo.NewPlane(0, 1, 0, 0), pMat) s.AddActor(groundPlane.ToActor()) - //Add dynamic box + //Add box1 v := pgo.NewVec3(0, 10, 0) q := pgo.NewQuat(0, 0, 1, 0) tr := pgo.NewTransform(v, q) @@ -50,6 +50,7 @@ func main() { dynBox := pgo.CreateDynamic(p, tr, box.ToGeometry(), pMat, 1, shapeOffset) s.AddActor(dynBox.ToActor()) + //Add box2 v = pgo.NewVec3(0.5, 12, 0) tr2 := pgo.NewTransform(v, qID) dynBox2 := pgo.CreateDynamic(p, tr2, box.ToGeometry(), pMat, 1, shapeOffset) @@ -68,7 +69,6 @@ func main() { s.AddActor(dynCapsule.ToActor()) //Add compound shape - dynComp := p.CreateRigidDynamic(pgo.NewTransform(pgo.NewVec3(0, 35, 0), qID)) 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) @@ -96,7 +96,9 @@ func main() { //Run simulation s.SetScratchBuffer(4) for { - s.Simulate(1 / 60.0) + s.Collide(1 / 60.0) + s.FetchCollision(true) + s.Advance() s.FetchResults(true) } diff --git a/pgo/libs/libphysx-c.a b/pgo/libs/libphysx-c.a index 8e6f615940bb2b8c8aebf9f61808962e06f6d4ee..70877f9dbd0bca9d013aba0dcc7cfe621cee4eb1 100755 GIT binary patch delta 1885 zcmb8vT}Yc(7zgmb+Bshvol|2!oL0rUYONZL*7%V`qtSdv?M0!`C^2Ogr>otD(9%p0 zc2mUV6b24DWo&b!c7nYqU16ewiZCf1c;RR}9NRjOU6id9+3fx&CyH&a7Wn1lIUmnC z=RN1m&r@+5U&M`@!j-i(dC^aIGJwy3;#HuOKabS_75z%tI3Rg%DZV3sRQ^P%N&=!r zSyJVgV!RAU6>CcQF#A(=OxaeLiMQA(#&Z{ts+m}-8B$CYfaIG{>RBI^$dW1x71LGr zqq@wP2um{R6#rQuDxM{EhBx^|%_U0X5+F5CD`q<&H5nD_bwFyp5|hS~tX!Pb!pWkz zfEKdcR&0}i)Ud3W=b4wnP1l&1Yz0bVI~PC}v(j*a1E~IiV&?==2U$`ZA9qwLOL9#p z?j%5R&MJ;>Kyo%Hjupl$2*Z7e9jX1X;^IOiuUp|-5Ot9y`BxS92FH=-v|_jkNFB{F zH&{|FcPSme7ju#&)vQZ-Y~)0e!Kri>@kk`@v@;^U$*mS&mmHW&P8dn4>FIsHXCN3t zAkg>rI{}-2xGNYM2nDvQcPh?=-VMHG8|?4zJKr}rAO?%{hMfpIy@Iks?@QTY)pH|h z|0IMfO*`*L7oWsxF~3T=@?$_h&wIQKxa9?o_<$$nKvESjN@JD4Wh1c0KEtdZt_HT) zcZ+p*J?zVPsD^Ka37Fv6p?V;Z3OVj7>oV(r2!(YVaMlmR(`F}7!pFPR2u!oIn|Z67 zfa_M^N-K~?75p7(VFJ2s0VZw0GS7UTeXp@^0poU#H?!>o>mP8^h#fdcqisMcO}Mxb zp2)0|_oLgv3&^8cVR?y_k9ipi*ul+R%ZqW5R=Kzhww>nAZW{RJbO1MKz81K595_kq z+^w6jlkG*^NQC%zgIAD-R3u>!QqTbh4qz`dBqIkpybkfFK2h_*3lIEoi+}Z&))us) z35~G8j0QBL4)w62jcZAV4T*RaSvZ7T*x`f=o#;Xw;$NIbJk;x-&ujSKdFK-L*%K>X zx_jHVYUi3ge;Ma2IaV!qd(;aTIW|^aSk1P5edh*?e$5x%<(b(R_WS?H;WIPwY3-y} zsYHHxSN56LdN*Zz-R^dkQ#4gs#fPShyxy6-NBpO*Am56xmA2nm8qpC8a4~q zu|b?`@6%crjX%A~s8RgVKByUni=WAf%;Jc{xz1}3EA*=}bBjoEhqUjX zE^Nvyt>S_^q+7Ui?r%BH&ZUdVge);*)QNeQL0CK)+Vo#r>-*W*CQf+*+SI4Em3@rb z#Ui8rFW+0tX5Rrg~)BbQ7XPS=ZUUxzOLlh32;b<4`x s^ei#v^K0KtPp!yt9`U;`sNJ^~K9e(eMVCLI85c5skXd}Z2$lO delta 1556 zcmb8uTTEO<7zgnG0%8xBWw}J!6jqD9AS4OYX0txeT}#`J+S7D3IT3{d&dDe#y3^nAZWR_h`W? zTe1x(9e21e>c3xbhApMDC;3O7$BOejAbC$HE}n|iw^=aGmI6l<|6M?Gb8(WN1tlMg zOYTXZ%u89%C<~MKk>af20?1vYICgRZ*{>-6H5I>KnR}&rqd05n{QtE~1DIx!#TH=8#L4Zz z;a0v#3E(o_Yy*}p+)W3NVVmv*W;n*lerFf3z_APL3&c5=v9%j`(gW!Gd2I)lY{0r1 zINA%W(g5S^9VWZa0cYqWSMZo8a^4A?@B(EnV6zVxry~L2uAd3roXB?72Tbz%INJ*j z;2g(}a_%F}tKj@1-rLFkYb-nvWDU-bgn$)Z>!ZK~?TzrUZ17?(3{3Ia&U5999OPjf zO9DfDG%Ga0RnIYQPO%VoG-U-EXqG!P$Q|$q85f5T@+RO3EdrjP{O>DtFsR`}@Ra{Uh4=>NgKxW#kc!$HhDw6&TK vwq%8<&}Bxn$@POva$ZcF&K%Q5e|+;-Ss^Zd$qZ^YTHk#r=Osk=(7yiwxkW*u diff --git a/pgo/pgo.go b/pgo/pgo.go index 578a7e4..67accf7 100755 --- a/pgo/pgo.go +++ b/pgo/pgo.go @@ -99,6 +99,20 @@ func (s *Scene) Simulate(elapsedTime float32) { C.CPxScene_simulate(s.cS, C.float(elapsedTime)) } +// void CPxScene_advance(CSTRUCT CPxScene*); + +func (s *Scene) Collide(elapsedTime float32) { + C.CPxScene_collide(s.cS, C.float(elapsedTime)) +} + +func (s *Scene) FetchCollision(block bool) bool { + return bool(C.CPxScene_fetchCollision(s.cS, C._Bool(block))) +} + +func (s *Scene) Advance() { + C.CPxScene_advance(s.cS) +} + func (s *Scene) FetchResults(block bool) (bool, uint32) { var errState uint32 @@ -126,9 +140,6 @@ func (p *Physics) CreateMaterial(staticFriction, dynamicFriction, restitution fl } } -// CPxAPI CSTRUCT CPxRigidDynamic* CPxPhysics_createRigidDynamic(CSTRUCT CPxPhysics* cp, CSTRUCT CPxTransform* ctr); -// CPxAPI CSTRUCT CPxRigidStatic* CPxPhysics_createRigidStatic(CSTRUCT CPxPhysics* cp, CSTRUCT CPxTransform* ctr); - func (p *Physics) CreateRigidDynamic(tr *Transform) *RigidDynamic { return &RigidDynamic{ cRd: C.CPxPhysics_createRigidDynamic(p.cPhysics, &tr.cT), diff --git a/pgo/physx-c/CPxScene.h b/pgo/physx-c/CPxScene.h index 99acf2e..22d052c 100755 --- a/pgo/physx-c/CPxScene.h +++ b/pgo/physx-c/CPxScene.h @@ -18,6 +18,9 @@ extern "C" { CPxAPI CSTRUCT CPxPvdSceneClient* CPxScene_getScenePvdClient(CSTRUCT CPxScene*); CPxAPI void CPxScene_addActor(CSTRUCT CPxScene*, CSTRUCT CPxActor actor); CPxAPI void CPxScene_simulate(CSTRUCT CPxScene*, CPxReal elapsedTime); + CPxAPI void CPxScene_collide(CSTRUCT CPxScene*, CPxReal elapsedTime); + CPxAPI bool CPxScene_fetchCollision(CSTRUCT CPxScene*, bool block); + CPxAPI void CPxScene_advance(CSTRUCT CPxScene*); CPxAPI bool CPxScene_fetchResults(CSTRUCT CPxScene*, bool block, CPxU32* errorState); ///