WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 10-31-2012, 10:29 AM
mhead10 mhead10 is offline
Member
 
Join Date: Mar 2012
Posts: 40
Physics: Ball Bounces Unexpectly Based Upon Size + Ring Collision Shape

I have modified an example physics script to try and determine why my script isn't working. I want my "ball.wrl" to remain stationary on the ground (as it would in real life because gravity keeps it on the ground). However, this only seems to work if the ball scale is very small (0.1,0.1,0.1) versus large (10,10,10). If the scale is large, the ball takes an initial bounce and then remains stationary. I've set ball bounce equal to zero, so I'm not sure why the ball bounces. (I realize the "bounce" effect scales with size, but I would like to get rid of the initial effect from the beginning).

Code:
#meshing
import viz
import vizact
import vizcam
viz.phys.enable()   # Enable physics

viz.setMultiSample(4)
viz.fov(60)
viz.go()

#Change navigation style to pivot
cam = vizcam.PivotNavigate(center=[0,0,0], distance = 15)
cam.rotateUp(45)
cam.rotateRight(0)

#Add the object that will do the grabbing
hand = viz.addChild( 'marker.wrl' )
hand.setPosition( [-0.5, 1.8, 2.5] )

viz.phys.setGravity(0,-9.8/6,0) #Half Gravity
ground = viz.add('tut_ground.wrl')  # Add ground
ground.collidePlane()   # Make collideable plane

logo = viz.add('logo.wrl',pos=[0,1,6]) # Add logo
logo.collideMesh(bounce=1.5) # Collide and make it bounce a bit

link = None #The handle to the link object


for x in range(10):
    for z in range(10):
        ball = viz.add('white_ball.wrl',pos=[-.5+.1*x,2.5+.1*z,6],scale=[.5,.5,.5])
        ball.collideSphere()


x = viz.add('ball.wrl', pos =(0,0,0), scale=[1,1,1])
ringPhys = x.collideSphere(bounce = 0)   # Define x's physical properties

#Grab or let go of the ball
def toggleLink():
    global link
    if link:
        #If link exits, stop grabbing
        link.remove()
        link = None
    else:
        #If no link, grab the ball with the hand
        link = viz.grab(hand, x)

vizact.onkeydown(' ',toggleLink)


#Setup keyboard control of hand and ball
vizact.whilekeydown(viz.KEY_UP,hand.setPosition,[0,vizact.elapsed(1),0],viz.REL_PARENT)
vizact.whilekeydown(viz.KEY_DOWN,hand.setPosition,[0,vizact.elapsed(-1),0],viz.REL_PARENT)
vizact.whilekeydown(viz.KEY_RIGHT,hand.setPosition,[vizact.elapsed(1),0,0],viz.REL_PARENT)
vizact.whilekeydown(viz.KEY_LEFT,hand.setPosition,[vizact.elapsed(-1),0,0],viz.REL_PARENT)

vizact.whilekeydown('w',hand.setEuler,[vizact.elapsed(90),0,0],viz.REL_PARENT)
vizact.whilekeydown('s',hand.setEuler,[vizact.elapsed(-90),0,0],viz.REL_PARENT)
vizact.whilekeydown('d',hand.setEuler,[0,vizact.elapsed(90),0],viz.REL_PARENT)
vizact.whilekeydown('a',hand.setEuler,[0,vizact.elapsed(-90),0],viz.REL_PARENT)
Secondly, if I change the ball collision shape to mesh, gravity no longer affects the ball. I'm guessing the documentation is defining gravity as a force (link), "Collide mesh objects are unaffected by forces and can only provide a solid collision area for other objects." Therefore, is there a way I can have a ring shape (just like a wedding ring) be a collision shape and be affected by gravity. I need to have the ring be dropped around a peg (capsule collision shape or mesh of cylinders) without having the ring go through the peg (only around it).

Thanks for your time!
Reply With Quote
 

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
collision with physics enabled joeymax Vizard 2 04-17-2008 02:49 PM


All times are GMT -7. The time now is 01:05 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC