From d143660a1fae63c6b3e1e13db06e85bfa5c68e2e Mon Sep 17 00:00:00 2001 From: bloeys Date: Wed, 16 Feb 2022 08:17:49 +0400 Subject: [PATCH] Start raycast implementation --- main.go | 11 +++++++++++ pgo/libs/libphysx-c.a | Bin 22500 -> 22706 bytes pgo/pgo.go | 24 ++++++++++++++++++++++++ pgo/physx-c/CPxScene.h | 29 +++++++++++++++++++++++++++++ pgo/wrap.c | 1 + 5 files changed, 65 insertions(+) diff --git a/main.go b/main.go index a700f07..8abf937 100755 --- a/main.go +++ b/main.go @@ -1,6 +1,10 @@ package main import ( + "bufio" + "fmt" + "os" + "github.com/bloeys/physx-go/pgo" ) @@ -111,12 +115,19 @@ func main() { println("Capsule linear damping B:", dynCapsule.GetLinearDamping()) //Run simulation + r := bufio.NewReader(os.Stdin) s.SetScratchBuffer(4) for { s.Collide(1 / 60.0) s.FetchCollision(true) s.Advance() s.FetchResults(true) + + rHit, _ := s.Raycast(pgo.NewVec3(0, 0, 0), pgo.NewVec3(0, 1, 0), 9) + fmt.Printf("\nRaycast hit: %v\n", rHit) + + // println("Press enter...") + // r.ReadBytes('\n') } p.Release() diff --git a/pgo/libs/libphysx-c.a b/pgo/libs/libphysx-c.a index 7da1bf374f29fb2fff5058315fc1dc09532be9d4..829fc0038b462556a2ddfdd9db3b1ec0c0c2955f 100755 GIT binary patch delta 1777 zcmbW%e@NVA90%~XrRI5V)4chk)Tya|h?(baJx}k4_d`AJr}rZmT;lx0<;+=)O7Pep z4T=3>J``i?k83Pgi;+{<9}8AUkhCzOCKjYeh%9Cz%%H}w-p@TpjQ)y**L}X9&+~kr zU-z6_pQbI|NSo`7wKSI}|6a-la2=?-3DhTmh613;rRXOCX^35tCK#!4O=-CYNUbN7 z7Pd)k<4V&ljzf(RrJYgIZy+W=(3TS5q*6NvmOA`OS1uq8abZ$7>ymL>X-VgV)HRc` z&q&58rFDl3qu@e{laab_$K(ePF)6llfMl*x>>N}wUsihOfFzz)FFE&8xKk%t&nu2y zAZe13tVN3b5yvA_jbe$F02Z=kDR%BaGF?$D7uild3n`t9)W->u&M;CxPbKLjBYCz` z*ybTGPfK!hfzn`?5_5B9(%?14yTXp-T2UH&`nOurG6e2awCNP4HcRH?VC4()r#DYx^|C zd?&`i7J|Gnbeo+_T*WyXP-SLkJ8+qCt{2FrJtrrn^HyNj!NpM#pC7SbjR`2R09kx@ zhWQod7nv{g@aSl_4>&`Ke&8f+d6-ko@8y8}61xUD7~?g@71mZ=zyb4l?#9jM;{(7t zm4tu`e&DK)zay&Q^Mz($mi31eHvo&gmF=|56R2Ze%l7dw->2(5&GfI;-*Y1oj7 zr%-@nC_^7S@FI)|((uIN6aKgPI{x>3OU1?enHkB8x0F_1o1Ja!k1qm41QnE2l0w;`AguLvl!1T7x(o!A|7ZECcREmA3pn=TwtHb3yf;ocRt>f zYv>oTz^K;xMc$?ydw}!paSdaQ>OISlPV?65i7$)T<`U7NsAgWedp{SKUXmGa!j+XKpYGCw9{{QZpe9ja$mYaF(2}3 m;?>j3@-4r(9~#j-$+*pXSXvGL3DO#@`_mfJ;DK3aFm~8m<9N4;6b6AjO-WJI_c><4Wr^ zAhqQyt%b~~-J&!f1SI>W(#|N^Cy|l=(EeO307xBN*zkyvoR^hE2_SW`&v1s3S{9T} z8(=ucNL_L)wVhQG4>(^ssknwSfNK~?A6NXffaK08el9F|yo#?8ka{jEfmy)7lLn}# zPU)Kg3`LCOT~vDK0I7RL@no)ZVe(y2dU*oL?NhuCPNeRr;=0Fzsh=Adtc(=ol^J-A zK^kPA;WQ&fSeP_$UkS4yDH9H|L4#Y$z%dS>$h;EE@k%JPp#-0D0}7o`k`X}CSCuG> zGaO+geMo8P;1yAFNlCF7>W0(JyCp|V*?$)>9A+fPZKatTNGTR3rA?A}uRf9uZac6u z`)$$k_Kf|Xw>b@CeN5E@*BXF_O+b;I?`s@5Pvgv|TY>yGppenh4jgO-HaTXK?McQ- z#sJG2XWftJvJ)stu-yfmp@kN})(M=W66R+!TU_minLMh4+M+`a=h>F*C zdye*^4}N&zf}6MBg&sK32@gUDVgUUpfe!`P0V`gG4FN$QK`%R*Q<5Zcb!w+>`_T?E9*+T#mD>mH&7{ zj_Z|^PnA{)Ev}m#A55(B%fiQ&FHRLyiBOY8tS9VZqPbN2VzKylSyw>(8Xwb|gPYG} zCH*3t7_)qG;K_G#gP>e&eVbL>GA8=8iJ#ZEcJqUf*q0p9=BJBqmNOd=?=#yPj@)^f zSy((vj%qErj*VBCMa0q6sM-BX<*h1agDm9DGOPG2rJGA%U;9ID5|t+_D;I~-QO!AF jS&_4J@p*bwbFN+eNv?T6Km= 0 */ + CPxF32 distance; + CPxReal u, v; + CPxU32 faceIndex; + struct CPxShape shape; + struct CPxRigidActor actor; + }; + + struct CPxRaycastBuffer + { + struct CPxRaycastHit block; + struct CPxRaycastHit* touches; + CPxU32 nbTouches; + bool hasBlock; + }; + struct CPxScene { void* obj; @@ -22,6 +50,7 @@ extern "C" { CPxAPI bool CPxScene_fetchCollision(CSTRUCT CPxScene*, bool block); CPxAPI void CPxScene_advance(CSTRUCT CPxScene*); CPxAPI bool CPxScene_fetchResults(CSTRUCT CPxScene*, bool block, CPxU32* errorState); + CPxAPI bool CPxScene_raycast(CSTRUCT CPxScene* cs, CSTRUCT CPxVec3* origin, CSTRUCT CPxVec3* unitDir, CPxReal distance, CSTRUCT CPxRaycastBuffer** hitRet); /// /// Creates a scratch buffer thats a multiple of 16K to be used by the scene when running CPxScene_simulate. diff --git a/pgo/wrap.c b/pgo/wrap.c index 6491834..9a37122 100755 --- a/pgo/wrap.c +++ b/pgo/wrap.c @@ -7,6 +7,7 @@ #define CENUM enum #define CPxU32 uint32_t #define CPxReal float +#define CPxF32 float #include #include