WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 08-08-2011, 08:33 AM
kovitch kovitch is offline
Member
 
Join Date: Sep 2010
Posts: 30
Unhappy Vizard Collision (ON) issue

Hi,

I'm trying to enable the collision in my world. However, when I use the line viz.collision(viz.ON) something strange happens and I'm not sure what it is.

Could someone give me a tip about what is happening?

My guess is that there's something wrong with the view, but I don't know what to do.

Here is the code:

Code:
import viz
import viztask
import vizmat
import AvatarCamera

viz.go()

viz.MainView.getHeadLight().disable()
#add sun-like directional light
l = viz.addLight()
l.position(0, 1, -.2, 0) #sets light direction

#root encapsulates all world geometry
#root = viz.addGroup()

#viz.setOption('viz.model.apply_collada_scale',1)
#viz.add('Bairro_c_passeio_4.dae', pos=[-1, 0, -1])

ground = viz.add('tut_ground.wrl')

avatarRoot = viz.addGroup()
avatarRoot = viz.add('marker.wrl')
cameraLookAtNode = viz.addGroup(parent=avatarRoot, pos=[0, 1.5, 0])
avatar = viz.add('vcc_male.cfg', parent=avatarRoot)

#Turn on collision
viz.collision(viz.ON)

#setup physics system so viewpoint does not move through walls
viz.phys.enable()
avatar.collideMesh(bounce=0, hardness=1, friction=0)
																																
def moveAvatar():
	avatar_speed = 1
	running = False
	jump =  False
	while True:
		#get user input
		newPos = vizmat.Vector()
		newPos.set([0,0,0])
		if viz.iskeydown(viz.KEY_SHIFT_L):
			avatar_speed = 10
			running = True
		else:
			avatar_speed = 4
			running = False
	
		if viz.iskeydown('w'):
			#walk forward
			newPos = newPos + [0, 0, avatar_speed]
		if viz.iskeydown('s'):
			newPos = newPos + [0, 0, -avatar_speed]
		if viz.iskeydown('a'):
			newPos = newPos + [-avatar_speed, 0, 0]
		if viz.iskeydown('d'):
			newPos = newPos + [avatar_speed, 0, 0]		
		isJumping = False
		isAttacking = False
		if viz.iskeydown(' '):
			#jump
			isJumping = True
		elif viz.iskeydown('v'):
			isAttacking = True
		
		if isAttacking:			
			avatar.state(6)
			yield viztask.waitTime( 1.5 )
		if newPos.length() > 0 or isJumping:
			if newPos.length() == 0:
				#jumping but no direction key, use current heading
				t = vizmat.Transform()
				t.setTrans([0, 0, 1.8])
				t.postEuler(avatar.getEuler()[0],0,0)
				newPos = vizmat.Vector( t.getTrans() )
			newYaw = vizmat.AngleToPoint(0, 0, newPos[0], newPos[2])
			avatar.setEuler(newYaw, 0, 0)
			if not isJumping:
				#just walking				
				cameraEuler = viz.MainView.getEuler()
				avatarRoot.setEuler(cameraEuler[0], 0, 0)
				newPos = newPos * viz.getFrameElapsed()
				avatarRoot.setPosition(newPos, viz.REL_LOCAL)
				if running == False:	
					avatar.state(2)
				else:
					avatar.state(11)
			else:
				#jumping
				avatar.state(7)
				yield viztask.waitTime( avatar.getDuration(7)+.01 )
				#compute jump direction
				newJumpPos = vizmat.Transform()
				newJumpPos.setTrans([0, 0, 1.8])
				newJumpPos.postEuler(avatar.getEuler(viz.ABS_GLOBAL)[0], 0, 0)
				avatarRoot.setPosition(newJumpPos.getTrans(), viz.REL_GLOBAL)
		
		
		if not (viz.iskeydown(' ') or viz.iskeydown('w') or viz.iskeydown('s') or viz.iskeydown('a') or viz.iskeydown('d') ):
			avatar.state(1)
			
		yield None
		
viztask.schedule(moveAvatar())

import vizcam

camera = vizcam.PivotNavigate()
camera.setDistance(5)


def moveCamera():
	while True:
		lookAtPos = avatar.getBone('Bip01 Pelvis').getPosition(viz.ABS_GLOBAL)
		lookAtPos[1] = lookAtPos[1] + .5
		camera.setCenter(lookAtPos)
		camera.updateCenter()
		
		yield None	

viztask.schedule(moveCamera())

Last edited by kovitch; 08-08-2011 at 08:36 AM.
Reply With Quote
  #2  
Old 08-08-2011, 12:44 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
Please post or attach example code that we can run to see the issue. Also, try to make the example as concise as possible.
Reply With Quote
  #3  
Old 08-09-2011, 01:40 AM
kovitch kovitch is offline
Member
 
Join Date: Sep 2010
Posts: 30
Run the following code, then uncomment the line viz.collision(viz.ON) and you will see what I am experiencing. Regards.

Code:
import viz
import viztask
import vizmat

viz.go()

viz.MainView.getHeadLight().disable()
#add sun-like directional light
l = viz.addLight()
l.position(0, 1, -.2, 0) #sets light direction

ground = viz.add('tut_ground.wrl')

avatarRoot = viz.addGroup()
avatarRoot = viz.add('marker.wrl')
cameraLookAtNode = viz.addGroup(parent=avatarRoot, pos=[0, 1.5, 0])
avatar = viz.add('vcc_male.cfg', parent=avatarRoot)

#Turn on collision
#viz.collision(viz.ON)

#setup physics system so viewpoint does not move through walls
viz.phys.enable()
avatar.collideMesh(bounce=0, hardness=1, friction=0)
																																
def moveAvatar():
	avatar_speed = 1
	running = False
	jump =  False
	while True:
		#get user input
		newPos = vizmat.Vector()
		newPos.set([0,0,0])
		if viz.iskeydown(viz.KEY_SHIFT_L):
			avatar_speed = 10
			running = True
		else:
			avatar_speed = 4
			running = False
	
		if viz.iskeydown('w'):
			#walk forward
			newPos = newPos + [0, 0, avatar_speed]
		if viz.iskeydown('s'):
			newPos = newPos + [0, 0, -avatar_speed]
		if viz.iskeydown('a'):
			newPos = newPos + [-avatar_speed, 0, 0]
		if viz.iskeydown('d'):
			newPos = newPos + [avatar_speed, 0, 0]		
		isJumping = False
		isAttacking = False
		if viz.iskeydown(' '):
			#jump
			isJumping = True
		elif viz.iskeydown('v'):
			isAttacking = True
		
		if isAttacking:			
			avatar.state(6)
			yield viztask.waitTime( 1.5 )
		if newPos.length() > 0 or isJumping:
			if newPos.length() == 0:
				#jumping but no direction key, use current heading
				t = vizmat.Transform()
				t.setTrans([0, 0, 1.8])
				t.postEuler(avatar.getEuler()[0],0,0)
				newPos = vizmat.Vector( t.getTrans() )
			newYaw = vizmat.AngleToPoint(0, 0, newPos[0], newPos[2])
			avatar.setEuler(newYaw, 0, 0)
			if not isJumping:
				#just walking				
				cameraEuler = viz.MainView.getEuler()
				avatarRoot.setEuler(cameraEuler[0], 0, 0)
				newPos = newPos * viz.getFrameElapsed()
				avatarRoot.setPosition(newPos, viz.REL_LOCAL)
				if running == False:	
					avatar.state(2)
				else:
					avatar.state(11)
			else:
				#jumping
				avatar.state(7)
				yield viztask.waitTime( avatar.getDuration(7)+.01 )
				#compute jump direction
				newJumpPos = vizmat.Transform()
				newJumpPos.setTrans([0, 0, 1.8])
				newJumpPos.postEuler(avatar.getEuler(viz.ABS_GLOBAL)[0], 0, 0)
				avatarRoot.setPosition(newJumpPos.getTrans(), viz.REL_GLOBAL)
		
		
		if not (viz.iskeydown(' ') or viz.iskeydown('w') or viz.iskeydown('s') or viz.iskeydown('a') or viz.iskeydown('d') ):
			avatar.state(1)
			
		yield None
		
viztask.schedule(moveAvatar())

import vizcam

camera = vizcam.PivotNavigate()
camera.setDistance(5)


def moveCamera():
	while True:
		lookAtPos = avatar.getBone('Bip01 Pelvis').getPosition(viz.ABS_GLOBAL)
		lookAtPos[1] = lookAtPos[1] + .5
		camera.setCenter(lookAtPos)
		camera.updateCenter()
		
		yield None	

viztask.schedule(moveCamera())
Reply With Quote
Reply

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
Realistic Light and Shadows Using Vizard and 3DS Max jde Vizard 4 07-13-2012 10:58 AM
Vizard 4 Beta Testing farshizzo Announcements 0 02-01-2011 10:46 AM
Vizard 4 Beta Testing farshizzo Vizard 0 02-01-2011 10:46 AM
Vizard tech tip: Using the Python Imaging Library (PIL) Jeff Vizard 0 03-23-2009 11:13 AM
vizard 2.5 compatability issue shai Vizard 3 08-10-2005 04:35 PM


All times are GMT -7. The time now is 02:38 AM.


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