November 25, 2020, 05:35:17 AM

Author Topic: [bb] NA_ODE by namar777 [ 1+ years ago ]  (Read 665 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] NA_ODE by namar777 [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
Title : NA_ODE
Author : namar777
Posted : 1+ years ago

Description : Nothing special, thought i'd might contribute some stuff that i'm currently not using. I mapped most of the "Useful" commands. There is much place for improvement, and maybe i hope not some corrections. The little plus here is you can place the Trimesh and scaleit directly from the code.

 The System tracks the Entities with number indexing in order to control them (positionentity,rotateentity and other commands). I also allowed realtime scaling of the meshes during runtime...

  ps: Just post any fixes on the comments section ;)
                                    Seee Ya
                                       Nassim Amar
                                        First Contribution
                                        Cheers


Code :
Code: BlitzBasic
  1. ;Title:NA_Ode(NassimAmar Ode) >>>>Ode 0.5b<<<<
  2. ;Description:Mapping Functions to B3d Standards
  3. ;
  4. ;
  5. ;Tutorial:
  6. ;       Creating Entities:
  7. ;                               1. NaOde_CreateCylinder(name,space,enable)
  8. ;                               2. Cylinder=NaOde_CreateCylinder(name,space,enable)
  9. ;                                Naming Entities Differently is Most useful when you as a programmer
  10. ;                                would want to change the position or rotation of the latter.
  11. ;                                               -NaOde_CreateCylinder(name,space,enable)
  12. ;                                               -NaOde_CreateCylinder(name,space,enable)
  13. ;                                               -NAOde_PositionEntity(name,180,0,0)--> This Will Move Both objects Named "x"
  14. ;----------------------------------------------------------------------------------------------
  15. ;       Arrays:
  16. ;                                                       Dim Cylinders(20)
  17. ;                                                       For x=1 To 20
  18. ;                                                       NaOde_CreateCylinder(name,space,enable)
  19. ;                                                       NAOde_PositionEntity(name,Rnd(10),Rnd(10),Rnd(10))
  20. ;                                                       Next
  21. ;                                                               >>Put the x in the Name Place as NAOde. Doing So
  22. ;                                                                 will logically give the Various Entities Created
  23. ;                                                                 different numbers, Hence allowing the use of specific
  24. ;                                                                 functions. But since probably you'll be using numerous
  25. ;                                                                 arrays. Might as well as a string before the "x"
  26. ;                                                                               -NAOde_PositionEntity(name,rnd(10),rnd(10),rnd(10))
  27. ;
  28.  
  29. Const dParamLoStop                      = 0
  30. Const dParamHiStop                      = 1
  31. Const dParamVel                         = 2
  32. Const dParamVel2                        = 258
  33. Const dParamFMax                        = 3
  34. Const dParamFMax2                       = 259
  35. Const dParamFudgeFactor         = 4
  36. Const dParamBounce                      = 5
  37. Const dParamCFM                         = 6
  38. Const dParamStopERP                     = 7
  39. Const dParamStopCFM                     = 8
  40. Const dParamSuspensionERP       = 9
  41. Const dParamSuspensionCFM       = 10
  42.  
  43. Const dContactMu2               = $001
  44. Const dContactFDir1             = $002
  45. Const dContactBounce    = $004
  46. Const dContactSoftERP   = $008
  47. Const dContactSoftCFM   = $010
  48. Const dContactMotion1   = $020
  49. Const dContactMotion2   = $040
  50. Const dContactSlip1             = $080
  51. Const dContactSlip2             = $100
  52. Const dContactApprox0   = $0000
  53. Const dContactApprox1_1 = $1000
  54. Const dContactApprox1_2 = $2000
  55. Const dContactApprox1   = $3000
  56.  
  57. Const NAOde_PrimitiveMeshes=1
  58. Const NAOde_Meshes=2
  59. Const NAOde_Joints=3
  60.  
  61. Const NAODE_Cube=1
  62. Const NAODE_Sphere=2
  63. Const NAODE_Cylinder=3
  64.  
  65. Const Hinge=1
  66. Const Slider=2
  67. Const Universal=3
  68. Const Hinge2=4
  69. Const Fixed=5
  70. Const Motor=6
  71. Const Ball=7
  72. SeedRnd MilliSecs()
  73.  
  74. Type TODEGeom
  75.         Field body%,joint%,typjoint
  76.         Field geom%,tdata,enable,geo
  77.         Field mesh%,mesh2%,name$,cnt,id,flag
  78. End Type
  79.  
  80. Global space%=ODE_dWorldCreate(1)
  81. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>My Functions<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  82. Function NAODE_Init(Gravity#=-1,Bounce#=0.2,BounceVelocity#=1,Friction#=0.6,Friction2#=0.6,EntitiesSoftness#=0,GroundSoftness#=0,Slip1#=0,Slip2#=0,Motion1#=0,Motion2#=0)
  83. ODE_dWorldSetGravity(0, Gravity#, 0)
  84. ODE_dSetBOUNCE(Bounce#)
  85. ODE_dSetBOUNCE_VEL(BounceVelocity#)
  86. ODE_dSetMU(Friction#); Friction
  87. ODE_dSetMU2(Friction2#); Friction
  88. ODE_dSetSOFT_ERP(EntitiesSoftness#)
  89. ODE_dSetSOFT_CFM(GroundSoftness#)
  90. ODE_dSetSLIP1(Slip1#)
  91. ODE_dSetSLIP1(Slip2#)
  92. ODE_dSetMOTION1(Motion1#)
  93. ODE_dSetMOTION2(Motion2#)
  94. End Function
  95.  
  96. Function NAODE_Features(all)
  97. ODE_dSetContactMode(all)
  98. End Function
  99.  
  100. Function NAODE_CountEntities(id)
  101. num=0
  102. For g.TodeGeom=Each TodeGeom
  103. If gid=id Then num=num+1
  104. Return num
  105. Next
  106. End Function
  107.  
  108. Function NAODE_CreateCylinder(name$,world,gravmode=0)
  109. g.TOdeGeom=New TOdeGeom
  110. g
  111. ame$=Upper(name$)
  112. gid=NAOde_PrimitiveMeshes
  113. gcnt=NAOde_CountEntities(gid)
  114. genable=1
  115. ggeo=NAODE_Cylinder
  116. gody=ODE_dBodyCreate()
  117. ggeom=ODE_dCreateCCylinder(world,radius#,height#,mass#)
  118. ODE_dGeomSetBody(ggeom,gody)
  119. gmesh=CreateCylinder()
  120. ScaleEntity gmesh,1,1,1
  121. ODE_dBodySetPosition gody,0,0,0
  122. ODE_dBodySetRotation gody,0,0,0
  123. ODE_dBodySetGravityMode(gody,gravmode)
  124. Return gmesh
  125. End Function
  126.  
  127. Function NAODE_CreateCube(name$,world,gravmode=0)
  128. g.TOdeGeom=New TOdeGeom
  129. g
  130. ame$=Upper(name$)
  131. gid=NAOde_PrimitiveMeshes
  132. gcnt=NAOde_CountEntities(gid)
  133. ggeo=NAODE_Cube
  134. gmesh=CreateCube()
  135. genable=1
  136. ScaleEntity gmesh,1,1,1
  137. gody=ODE_dBodyCreate()
  138. ggeom=ODE_dCreateBox(world,MeshWidth(gmesh),MeshHeight(gmesh),MeshDepth(gmesh),mass#)
  139. ODE_dGeomSetBody(ggeom,gody)
  140. ODE_dBodySetPosition gody,0,0,0
  141. ODE_dBodySetRotation gody,0,0,0
  142. ODE_dBodySetGravityMode(gody,gravmode)
  143. Return gmesh
  144. End Function
  145.  
  146. Function NAODE_CreateSphere(name$,world,gravmode=0)
  147. g.TOdeGeom=New TOdeGeom
  148. g
  149. ame$=Upper(name$)
  150. gid=NAOde_PrimitiveMeshes
  151. gcnt=NAOde_CountEntities(gid)
  152. ggeo=NAODE_Sphere
  153. gody=ODE_dBodyCreate()
  154. genable=1
  155. ggeom=ODE_dCreateSphere%(world, radius#, mass#)
  156. ODE_dGeomSetBody(ggeom,gody)
  157. gmesh=CreateSphere()
  158. ScaleEntity gmesh,1,1,1
  159. ODE_dBodySetPosition gody,0,0,0
  160. ODE_dBodySetRotation gody,0,0,0
  161. ODE_dBodySetGravityMode(gody,gravmode)
  162. Return gmesh
  163. End Function
  164.  
  165.  
  166. Function NAODE_SetMeshToBody(name$,meshpath$)
  167. For g.TodeGeom=Each TodeGeom
  168. If g
  169. ame$=Upper(name$) And gid=NAODE_PrimitiveMeshes
  170. gmesh=LoadMesh(meshpath$)
  171. Return gmesh
  172. EndIf
  173. Next
  174. End Function
  175.  
  176. Function NAODE_LoadMesh%(path$,name$,x#=0,y#=0,z#=0,scale#=1) ;rx#=0,ry#=0,rz#=0 On A later Version
  177. g.TODEGeom=New TODEGeom
  178.         g       data=t_data
  179.         g
  180. ame$=Upper(name$)
  181.         gid=NAODE_Meshes
  182.         gcnt=NAODE_CountEntities(gid)
  183.         gmesh=LoadMesh(path$)
  184.         mesh%=CopyMesh(gmesh)
  185.         tris_count% = 0
  186.         vert_count% = 0
  187.         For i = 1 To CountSurfaces(mesh)
  188.                 tris_count = tris_count + CountTriangles(GetSurface(mesh, i))
  189.                 vert_count = vert_count + CountVertices(GetSurface(mesh, i))
  190.         Next
  191.         DebugLog "Tris count: " + tris_count
  192.         DebugLog "Vertices count: " + vert_count
  193.                 DebugLog "surface count: "+CountSurfaces(mesh)
  194.         vertices_bank% = CreateBank(vert_count * 4 * 4)
  195.         indices_bank% = CreateBank(tris_count * 3 * 4)
  196.  
  197.         offset% = 0
  198.         offset_tris% = 0
  199.         baseverts=0
  200.         For i = 1 To CountSurfaces(mesh)
  201.                 sf = GetSurface(mesh, i)
  202.                 For v = 0 To CountVertices(sf) - 1
  203.                         PokeFloat vertices_bank, offset, VertexX(sf, v)*(scale#)+x#
  204.                         offset = offset + 4
  205.                         PokeFloat vertices_bank, offset, VertexY(sf, v)*(scale#)+y#
  206.                         offset = offset + 4
  207.                         PokeFloat vertices_bank, offset, VertexZ(sf, v)*(scale#)+z#
  208.                         offset = offset + 8
  209.                 Next
  210.                 For t = 0 To CountTriangles(sf) - 1
  211.                         For j = 0 To 2
  212.                                 v = TriangleVertex(sf, t, j)+baseverts
  213.                                 PokeInt indices_bank, offset_tris, v
  214.                                 offset_tris = offset_tris + 4
  215.                         Next
  216.                 Next
  217.                 baseverts=baseverts+CountVertices(sf)
  218.         Next
  219.         FreeEntity mesh
  220.         PositionEntity gmesh,x#,y#,z#
  221.         RotateEntity gmesh,rx#,ry#,rz#
  222.         ScaleEntity gmesh,scale#,scale#,scale#
  223.         t_data = ODE_dGeomTriMeshDataCreate()
  224.         ODE_dGeomTriMeshDataBuildSimple(t_data, vertices_bank, vert_count, indices_bank, tris_count * 3)
  225.         ODE_dCreateTriMesh(space, t_data)
  226.         Return gmesh
  227. End Function
  228.  
  229. Function NAODE_PositionEntity(name$,x#,y#,z#)
  230. For g.TOdeGeom=Each TOdeGeom
  231. If g
  232. ame$=Upper(name$) ODE_dBodySetPosition gody,x#,y#,z#
  233. Next
  234. End Function
  235.  
  236. Function NAODE_RotateEntity(name$,rx#,ry#,rz#)
  237. For g.TOdeGeom=Each TOdeGeom
  238. If g
  239. ame$=Upper(name$) ODE_dBodySetRotation gody,rx#,ry#,rz#
  240. Next
  241. End Function
  242.  
  243. Function NAODE_ScaleEntity(name$,world,x#,y#,z#,mass#=1)
  244. For g.TOdeGeom=Each TOdeGeom
  245. If g
  246. ame$=Upper(name$)
  247.         If ggeo=NAODE_Cube
  248.                 ODE_dGeomDestroy(ggeom)
  249.                 ggeom=ODE_dCreateBox(world,x#,y#,z#,mass#)
  250.                 ODE_dGeomSetBody(ggeom,gody)
  251.                 ScaleEntity gmesh,x#,y#,z#
  252.         EndIf
  253.         If ggeo=NAODE_Sphere
  254.                 ODE_dGeomDestroy(ggeom)
  255.                 ggeom=ODE_dCreateSphere(world, x#, mass#)
  256.                 ODE_dGeomSetBody(ggeom,gody)
  257.                 ScaleEntity gmesh,x#,x#,x#
  258.         EndIf
  259.         If ggeo=NAODE_Cylinder
  260.                 ODE_dGeomDestroy(ggeom)
  261.                 ggeom=ODE_dCreateCCylinder(world,x#,y#,mass#)
  262.                 ODE_dGeomSetBody(ggeom,gody)
  263.                 ScaleEntity gmesh,x#,y#,x#
  264.         EndIf  
  265. EndIf
  266. Next
  267. End Function
  268.  
  269. Function NAODE_PushEntity(name$,x#,y#,z#)
  270. For g.TOdeGeom=Each TOdeGeom
  271. If g
  272. ame$=Upper(name$) ODE_dBodyAddForce gody,x#,y#,z#
  273. Next
  274. End Function
  275.  
  276. Function NAODE_TorqueEntity(name$,x#,y#,z#)
  277. For g.TodeGeom=Each Todegeom
  278. If g
  279. ame$=Upper(name$) ODE_dBodyAddTorque gody,x#,y#,z#
  280. Next
  281. End Function
  282.  
  283. Function NAODE_TranslateEntity(name$,x#,y#,z#)
  284. For g.TOdeGeom=Each TOdeGeom
  285. If g
  286. ame$=Upper(name$) ODE_dBodyTranslateMass(gody,x#,y#,z#)
  287. Next
  288. End Function
  289.  
  290. Function NAODE_EntityX(name$)
  291. For g.TodeGeom=Each Todegeom
  292. If g
  293. ame$=Upper(name$) Return ODE_dBodyGetPositionX#(gody)
  294. Next
  295. End Function
  296.  
  297. Function NAODE_EntityY(name$)
  298. For g.TodeGeom=Each Todegeom
  299. If g
  300. ame$=Upper(name$) Return ODE_dBodyGetPositionY#(gody)
  301. Next
  302. End Function
  303.  
  304. Function NAODE_EntityZ(name$)
  305. For g.TodeGeom=Each Todegeom
  306. If g
  307. ame$=Upper(name$) Return ODE_dBodyGetPositionZ#(gody)
  308. Next
  309. End Function
  310.  
  311. Function NAODE_EntityPitch(name$)
  312. For g.TodeGeom=Each Todegeom
  313. If g
  314. ame$=Upper(name$) Return ODE_dBodyGetPitch#(gody)
  315. Next
  316. End Function
  317.  
  318. Function NAODE_EntityYaw(name$)
  319. For g.TodeGeom=Each Todegeom
  320. If g
  321. ame$=Upper(name$) Return ODE_dBodyGetYaw#(gody)
  322. Next
  323. End Function
  324.  
  325. Function NAODE_EntityRoll(name$)
  326. For g.TodeGeom=Each Todegeom
  327. If g
  328. ame$=Upper(name$) Return ODE_dBodyGetRoll#(gody)
  329. Next
  330. End Function
  331.  
  332. Function NAODE_EnableEntity(name$)
  333. For g.TodeGeom=Each Todegeom
  334. If g
  335. ame$=Upper(name$) body=gody
  336. genable=1
  337. Next
  338. ODE_dBodyEnable(body%)
  339. End Function
  340.  
  341. Function NAODE_DisableEntity(name$)
  342. For g.TodeGeom=Each Todegeom
  343. If g
  344. ame$=Upper(name$) body=gody
  345. genable=0
  346. Next
  347. ODE_dBodyDisable(body%)
  348. End Function
  349.  
  350. Function NAODE_FreeEntity(name$)
  351. For g.TodeGeom=Each Todegeom
  352. If g
  353. ame$=Upper(name$)
  354. body=gody
  355. FreeEntity gmesh
  356. Delete g
  357. EndIf
  358. Next
  359. ODE_dBodyDestroy(body%)
  360. End Function
  361.  
  362. Function NAODE_EntityMass(name$,mass#)
  363. For g.TodeGeom=Each Todegeom
  364. If g
  365. ame$=Upper(name$) ODE_dBodySetMass(gody,mass#)
  366. Next
  367. End Function
  368.  
  369. Function NAODE_Gravity(x#,y#,z#)
  370. ODE_dWorldSetGravity(x#,y#,z#)
  371. End Function
  372.  
  373. Function NAODE_CountCollisions(name$)
  374. For g.TodeGeom=Each Todegeom
  375. If g
  376. ame$=Upper(name$) Return ODE_dBodyGetCollisionsCount%(gody)
  377. Next
  378. End Function
  379.  
  380. Function NAODE_CollisionX(name$)
  381. For g.TodeGeom=Each Todegeom
  382. If g
  383. ame$=Upper(name$) Return ODE_dBodyGetCollisionX#(gody, index%)
  384. Next
  385.  
  386. End Function
  387.  
  388. Function NAODE_CollisionY(name$,index)
  389. For g.TodeGeom=Each Todegeom
  390. If g
  391. ame$=Upper(name$) Return ODE_dBodyGetCollisionY#(gody, index%)
  392. Next
  393.  
  394. End Function
  395.  
  396. Function NAODE_CollisionZ(name$,index)
  397. For g.TodeGeom=Each Todegeom
  398. If g
  399. ame$=Upper(name$) Return ODE_dBodyGetCollisionZ#(gody, index%)
  400. Next
  401. End Function
  402.  
  403. Function NAODE_CollisionNX(name$,index)
  404. For g.TodeGeom=Each Todegeom
  405. If g
  406. ame$=Upper(name$) Return ODE_dBodyGetCollisionNX#(gody, index%)
  407. Next
  408. End Function
  409.  
  410. Function NAODE_CollisionNY(name$,index)
  411. For g.TodeGeom=Each Todegeom
  412. If g
  413. ame$=Upper(name$) Return ODE_dBodyGetCollisionNY#(gody,index%)
  414. Next
  415. End Function
  416.  
  417. Function NAODE_CollisionNZ(name$,index)
  418. For g.TodeGeom=Each Todegeom
  419. If g
  420. ame$=Upper(name$) Return ODE_dBodyGetCollisionNZ#(gody,index%)
  421. Next
  422. End Function
  423.  
  424.  
  425. Function NAODE_EntityCollided(name$,index)
  426. For g.TodeGeom=Each Todegeom
  427. If g
  428. ame$=Upper(name$) body=gody
  429. If gody=ODE_dBodyGetCollisionBody%(body%, index%)
  430. Return g
  431. ame$
  432. EndIf
  433. Next
  434. End Function
  435.  
  436. Function NAODE_EntityAngularVelX(name$)
  437. For g.TodeGeom=Each Todegeom
  438. If g
  439. ame$=Upper(name$)
  440. Return ODE_dBodyGetAngularVelX(gody)
  441. End If
  442. Next
  443. End Function
  444.  
  445. Function NAODE_EntityAngularVelY(name$)
  446. For g.TodeGeom=Each Todegeom
  447. If g
  448. ame$=Upper(name$)
  449. Return ODE_dBodyGetAngularVelY(gody)
  450. End If
  451. Next
  452. End Function
  453.  
  454. Function NAODE_EntityAngularVelZ(name$)
  455. For g.TodeGeom=Each Todegeom
  456. If g
  457. ame$=Upper(name$)
  458. Return ODE_dBodyGetAngularVelZ(gody)
  459. End If
  460. Next
  461. End Function
  462.  
  463. Function NAODE_EntityAngularVel(name$,ax#,ay#,az#)
  464. For g.TodeGeom=Each Todegeom
  465. If g
  466. ame$=Upper(name$)
  467.         ODE_dBodySetAngularVel(gody, ax#, ay#, az#)
  468. End If
  469. Next
  470. End Function
  471.  
  472.  
  473. Function NAODE_CreateJoint(name$,SelectWhichOne$)
  474. g.TodeGeom=New TodeGeom
  475. g
  476. ame$=Upper(name$)
  477. gid=NAODE_Joints
  478. gcnt=NAODE_CountEntities(gid)
  479. Select Upper(SelectWhichOne$)
  480.                 Case "BALL"
  481.                         gjoint=ODE_dJointCreateBall()
  482.                         g       ypjoint=Ball
  483.                 Case "HINGE"
  484.                         gjoint=ODE_dJointCreateHinge()
  485.                         g       ypjoint=Hinge
  486.                 Case "SLIDER"
  487.                         gjoint=ODE_dJointCreateSlider()
  488.                         g       ypjoint=Slider
  489.                 Case "UNIVERSAL"
  490.                         gjoint=ODE_dJointCreateUniversal()     
  491.                         g       ypjoint=Universal
  492.                 Case "HINGE2"
  493.                         gjoint=ODE_dJointCreateHinge2()
  494.                         g       ypjoint=Hinge2
  495.                 Case "FIXED"
  496.                         gjoint=ODE_dJointCreateFixed() 
  497.                         g       ypjoint=Fixed
  498.                 Case "MOTOR"
  499.                         gjoint=ODE_dJointCreateAMotor()
  500.                         g       ypjoint=Motor
  501.                 Default
  502.                         gjoint=ODE_dJointCreateHinge() 
  503.                         g       ypjoint=Hinge
  504. End Select
  505. End Function
  506.  
  507.  
  508.  
  509. Function NAODE_AttachJoint(joint$,name1$,name2$)
  510. For g.TodeGeom=Each Todegeom
  511. If g
  512. ame$=Upper(name2$) body2=gody
  513. If g
  514. ame$=Upper(joint$) joint=gjoint
  515. If g
  516. ame$=Upper(name1$) body1=gody
  517. Next
  518. ODE_dJointAttach(joint,body1,body2)
  519. End Function
  520.  
  521. Function NAODE_DetachJoint(joint$)
  522. For g.TodeGeom=Each Todegeom
  523. If g
  524. ame$=Upper(joint$) joint=gjoint
  525. Next
  526. ODE_dJointDestroy(joint)
  527. End Function
  528.  
  529. Function NAODE_DeleteVolume(name$)
  530. For g.TodeGeom=Each Todegeom
  531. If g
  532. ame$=Upper(name$) geom=ggeom
  533. Next
  534. ODE_dSpaceRemove(space%,geom)
  535. End Function
  536.                
  537. Function NAODE_PositionJointAxises(jointname$,axis1x#,axis1y#,axis1z#,axis2x#,axis2y#,axis2z#)
  538. For g.TodeGeom=Each TodeGeom
  539. If g
  540. ame$=Upper(jointname$) And gid=NAODE_Joints
  541.         If g    ypjoint=Hinge2
  542.                 ODE_dJointSetHinge2Axis1 (gjoint,axis1x#,axis1y#,axis1z#)
  543.                 ODE_dJointSetHinge2Axis2 (gjoint,axis2x#,axis2y#,axis2z#)
  544.         EndIf
  545.         If g    ypjoint=Hinge
  546.                 ODE_dJointSetHingeAxis(gjoint,axis1x#,axis1y#,axis1z#)
  547.         EndIf
  548. EndIf
  549. Next
  550. End Function
  551.  
  552. Function NAODE_SetJointParameter(name$,Parameter,Suspension#=.3)
  553. For g.TodeGeom=Each TodeGeom
  554. If g
  555. ame$=Upper(jointname$) And gid=NAODE_Joints
  556. ODE_dJointSetHinge2Param(gjoint, Parameter,Suspension#)
  557. EndIf
  558. Next
  559. End Function
  560.  
  561. Function NAODE_JointHinge2Angle1(name$)
  562. For g.TodeGeom=Each TodeGeom
  563. If g
  564. ame$=Upper(jointname$) And gid=NAODE_Joints
  565. Return ODE_dJointGetHinge2Angle1(gjoint)
  566. EndIf
  567. Next
  568. End Function
  569.  
  570. Function NAODE_CreateSimpleSpace(space)
  571. Return ODE_dSimpleSpaceCreate(space)
  572. End Function
  573.  
  574. Function NAODE_AddSpace(space,name$)
  575. For g.TodeGeom=Each Todegeom
  576. If g
  577. ame$=Upper(name$) ODE_dSpaceAdd(space%,ggeom)
  578. Next
  579. End Function
  580.  
  581.  
  582.  
  583.  
  584. Function NAODE_PositionJoint(name$,x#,y#,z#)
  585. For g.TodeGeom=Each TodeGeom
  586. If g
  587. ame$=Upper(jointname$) And gid=NAODE_Joints
  588. ODE_dJointSetHinge2Anchor(gjoint,x#,y#,z#)
  589. EndIf
  590. Next
  591. End Function
  592.  
  593. Function NAODE_UpdateWorld(TypeofUpdate=1)                              ;Modified the Original One Just to Keep Track of Each Entity
  594.         For g.TODEGeom = Each TODEGeom
  595.         If gid=NAOde_PrimitiveMeshes
  596.          For cnt=1 To NAOde_CountEntities(gid)
  597.           If gcnt=cnt  
  598.                 If genable=1
  599.                 ODE_dBodyEnable gody
  600.             PositionEntity gmesh, ODE_dGeomGetPositionX(ggeom), ODE_dGeomGetPositionY(ggeom), ODE_dGeomGetPositionZ(ggeom)
  601.                 RotateEntity gmesh, ODE_dGeomGetPitch(ggeom), ODE_dGeomGetYaw(ggeom), ODE_dGeomGetRoll(ggeom), 1
  602.           EndIf
  603.         EndIf  
  604.          Next
  605.         EndIf
  606.         Next
  607.         Select TypeofUpdate
  608.                 Case 2 
  609.                         ODE_dWorldStep(0.1)
  610.                 Default
  611.                         ODE_dWorldQuickStep(0.1)
  612.         End Select             
  613. End Function


Comments :


Fuller(Posted 1+ years ago)

 Needs an example


Fuller(Posted 1+ years ago)

 [double post sorry]


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal