Aiming Balls

Blitz3D Forums/Blitz3D Programming/Aiming Balls

Apocalypse(Posted 2004) [#1]
In my little code snippet below, the ball has starting coords and vectors for each axis, shouldn't there be some combination of functions which can simulate the ball rolling in the direction of its' vectors?

Please help if you can...

;**********************************

Function BallPhysics (Ball.Ball_Object)

If ball\y =< Ball\yMin# Then
Ball\y = Ball\yMin#
Ball\dy = -Ball\dy
Ball\dy = Ball\dy * Ball\elasticity
End If

If Ball\x =< Ball\xMin# Then
Ball\x = Ball\xMin#
Ball\dx = -Ball\dx
Ball\dx = Ball\dx * Ball\elasticity
End If

If Ball\x >= Ball\xMax# Then
Ball\x = Ball\xMax#
Ball\dx = -Ball\dx
Ball\dx = Ball\dx * Ball\elasticity
End If

If Ball\z =< Ball\zMin# Then
Ball\z = Ball\zMin#
Ball\dz = -Ball\dz
Ball\dz = Ball\dz * Ball\elasticity
End If

If Ball\z >= Ball\zMax# Then
Ball\z = Ball\zMax#
Ball\dz = -Ball\dz
Ball\dz = Ball\dz * Ball\elasticity
End If

If Ball\y >= Ball\yMin# Then
Ball\dy = Ball\dy + GRAVITY
End If

Ball\x = Ball\x + Ball\dx
Ball\z = Ball\z + Ball\dz
Ball\y = Ball\y + Ball\dy

Ball\dx = Ball\dx - (Ball\dx*Ball\friction)
Ball\dz = Ball\dz - (Ball\dz*Ball\friction)

;Move ball to new coords
PositionEntity Ball\Entity, Ball\x, Ball\y, Ball\z

;pitch#=VectorPitch(Ball\dx, Ball\dy, Ball\dz)
;yaw#=VectorYaw(Ball\dx, Ball\dy, Ball\dz)
;roll#=0

;Rotate mesh to give appearance of rolling
;RotateEntity Ball\Entity, pitch#, Yaw#, 0, 1

End Func


wedoe(Posted 2004) [#2]
This is one way to do it but it only works on a flat board.

You need a texture (texture.jpg) to see the ball rotate.
What I do below is make a pivot (visualized in the example)
and move it accordingly to the degrees of the balls orientation,
then I just point the ball at the pivot and turn the ball.

It's kinda cheating but it works well :)

Graphics3D 640,480,16,2
Global camera = CreateCamera()
Global camzoom#=10.0 
CameraZoom camera,camzoom#
CameraRange camera,1,(400 * camzoom#)+4000
PositionEntity camera,0,0,-500
sphere=CreateSphere(15)
texture=LoadTexture("texture.jpg")
EntityTexture sphere,texture 
PositionEntity sphere,0,0,500
RotateEntity sphere,0,0,0
ScaleEntity sphere,15,15,15
pivot=CopyEntity(sphere)
ScaleEntity pivot,5,5,5
WireFrame 0:HidePointer
SetBuffer BackBuffer()
While Not KeyDown(1)
pivx=(MouseX()-320)/3:pivy=(240-MouseY())/3
PositionEntity pivot,pivx,pivy,500
PointEntity sphere,pivot,0
If pivx < 0 Then TurnEntity sphere,180,180,0
If pivx=0 And pivy>0 Then TurnEntity sphere,0,0,90
If pivx=0 And pivy<0 Then TurnEntity sphere,0,0,270
TurnEntity sphere,0,0,z
z=z+5:z=z Mod 360
RenderWorld
Color 255,255,255
Text 10,10,"Rotate z= "+z
Text 10,30,"Pivot x= "+pivx
Text 10,50,"Pivot y= "+pivy
Flip
Wend
End



Apocalypse(Posted 2004) [#3]
Thanks Wedoe! I didn't usee your sample but your idea moved me in the right direction!