hi there,
i am experimenting with tokamak for some time now. up to now everything worked just fine but now i am experiencing some strange things.
i made up a little example (most of the code is not mine) with a ball-joint swinging. on all computers i tested it so far the ball-joint does not stop movement at angle 0, 0, 0 but on some angle of 1.5, 0, -0.3 or so. it sometimes even stopps movement when the ball is not even close to the center which looks pretty unrealistic.
does anyone have a clue?
Graphics3D 800, 600, 0, 2
SeedRnd MilliSecs()
; -> Cam & Light
camera = CreateCamera( )
PositionEntity camera, 0, 20, -35
light = CreateLight( 2 )
; -> Global Vars
Global elapsed, ticks
Global period = 1000 / 60
Global time = MilliSecs() - period
; -> Tokamak Init
Const Rigid_Bodies = 200
Const Animated_Bodies = 7
TOKSIM_SetRigidBodiesCount Rigid_Bodies
TOKSIM_SetAnimatedBodiesCount Animated_Bodies
TOKSIM_SetRigidParticleCount 0
TOKSIM_SetControllersCount 0
TOKSIM_SetGeometriesCount Rigid_Bodies + Animated_Bodies
TOKSIM_CreateSimulator( 0, -10, 0 )
; -> Ball & Chain
gBall = CreateSphere(12, gBall)
EntityColor gBall, 228, 228, 228
EntityShininess gBall, 1
gChain = CreateCylinder(8, 1, gBall)
PositionEntity gChain, 0, 14, 0
ScaleEntity gChain, .2, 14, .2
gLink = CreateCylinder(8, 1, gBall)
ScaleEntity gLink, .4, .2, .4
PositionEntity gLink, 0, 1, 0
EntityColor gLink, 128, 255, 0
gBall_RB = TOKRB_Create()
TOKRB_AddSphere gBall_RB, 2
TOKRB_SetPosition gBall_RB, 0, 5, 0
TOKRB_SetVelocity gBall_RB, Rand(1, 10), Rand(1, 10), Rand(1, 10)
TOKRB_SetMass gBall_RB, 150
TOKRB_SetSphereInertiaTensor gBall_RB,1, 150
TOKRB_UpdateBoundingInfo gBall_RB
TOKRB_SetAngularDamping gBall_RB, .01
TOKRB_SetLinearDamping gBall_RB, .01
TOKRB_SetCollisionID gBall_RB, 1
AlignToVector gBall, -x#, 0, -z#, 2
TOKRB_SetRotation gBall_RB, EntityPitch(gBall), EntityYaw(gBall), EntityRoll(gBall)
gBallJoint = TOKJOINT_Create(1, gBall_RB, 0)
TOKJOINT_SetPositionAndRotationWorld(gBallJoint, 0.0, 35.0, 0.0, 0, 0, 0)
TOKJOINT_SetType(gBallJoint, 1)
TOKJOINT_Enable(gBallJoint, True)
TOKJOINT_SetDampingFactor gBallJoint, 1.0
; -> Additional Meshes
shadow = CreateCylinder(16, 1)
ScaleEntity shadow, 1, 0.1, 1
PositionEntity shadow, 0, 0, 0
EntityColor shadow, 0, 0, 0
EntityAlpha shadow, 0.5
bullseye = CreateCylinder(16, 1)
ScaleEntity bullseye, 1.5, 0.01, 1.5
PositionEntity bullseye, 0, 0.05, 0
EntityColor bullseye, 255, 0, 0
EntityFX bullseye, 1
target = CreateCylinder(16, 1)
ScaleEntity target, 4, 0.01, 4
PositionEntity target, 0, 0.03, 0
EntityColor target, 255, 255, 0
EntityFX target, 1
ground = CreatePlane( )
EntityColor ground, 0, 200, 50
While Not KeyHit(1)
Repeat
elapsed = MilliSecs() - time
Until elapsed
ticks = elapsed/period
tween# = Float(elapsed Mod period)/Float(period)
For k=1 To ticks
time = time + period
If k = ticks CaptureWorld
If KeyHit(57) TOKRB_SetVelocity gBall_RB, Rand(1, 10), Rand(1, 10), Rand(1, 10)
TOKSIM_Advance( 0.1, 1 )
PositionEntity gBall, TOKRB_GetX#(gBall_RB),TOKRB_GetY#(gBall_RB),TOKRB_GetZ#(gBall_RB)
RotateEntity gBall, TOKRB_GetPitch#(gBall_RB),TOKRB_GetYaw#(gBall_RB),TOKRB_GetRoll#(gBall_RB),False
PositionEntity shadow, TOKRB_GetX#(gBall_RB), 0.1 ,TOKRB_GetZ#(gBall_RB)
Next
UpdateWorld( )
RenderWorld( tween# )
Text 10, 10, "PhysicsTime: " + TOKSIM_GetPhysicsTime()
Text 10, 30, "APitch: " + TOKJOINT_GetFrameAPitch( gBallJoint )
Text 10, 40, "AYaw: " + TOKJOINT_GetFrameAYaw( gBallJoint )
Text 10, 50, "ARoll: " + TOKJOINT_GetFrameARoll( gBallJoint )
Flip False
Wend
TOKSIM_DestroySimulator()
End
|