Vizard基础操作

#素材记录

import viz
import vizact
import vizmat
import vizcam
import viztask
import vizshape
import vizproximity

#--注意:变量名覆盖,可能出现数据混乱,可以用先remove删除之前的变量试试

viz.setMultiSample(4)
viz.fov(60)								#视角后退
viz.go()								#在默认情况下,Vizard程序启动后( viz.go()),虚拟视点站在世界坐标系的原点上,身高为1.82米,面部朝向Z轴正方向

#1.场景

#方格地面
viz.addChild('ground.osgb')				#多个场景冲突时,显示最先定义的场景
viz.addChild('ground_gray.osgb')
viz.addChild('ground_grass.osgb')

#课桌,遍历出六张
for x in [-2, 0, 2]:					#取位置坐标x=-2,x=0,x=2
	for z in [1, -1]:					#取位置坐标z=1,z=-1
		table = viz.addChild('getting started/table.wrl')
		table.setPosition([x,0,z])		#y轴向上,z垂直屏幕向里,x轴向右
		table.setEuler([0,0,0])			#设置角度
		table.setScale([1,1.5,1.5])		#设置大小
		
#门,添加开门效果
mydoor = myroom.getChild('door-FACES')	#获取模型的子物体(myroom是已经导入的模型)
mydoor.runAction( vizact.spinTo(euler=[-90,0,0], speed=5.0) )#绕Y轴(0, 1, 0)逆时针旋转90度,5度每秒。#旋转方向巧记:站上去,自身右侧为正

#投影,添加投屏回拉效果
screen = myroom.getChild('screen-FACES')
def screendown():						#写成函数,可以添加按键控制效果。#由moveTo看出,实际上屏幕是向上移动,而不是向上卷,上边的部分并没有消失,会裸露在模型外部
	screen.runAction(vizact.moveTo([0,3,0],speed=0.5))
vizact.onkeydown('u', screendown)		#screendown加括号时直接调用函数,按键控制失效

#局部视频,在教室的幕布上播放一段视频
def playMovie():
	mymovie = viz.addVideo('getting started/mona.mpg')
	screen.texture(mymovie)
	mymovie.loop(viz.ON)
	mymovie.play()
vizact.onkeydown('m', playMovie)

#灯光,开关控制
import random
def flickerLight():						#投影仪灯光控制#如何控制收投影时关灯光
	on = random.choice([0, 1])
	mylight.visible(on)					#mylight.visible(1)
vizact.ontimer(0.5,flickerLight)


#2.文本显示

import vizinfo
vizinfo.InfoPanel()						#显示三引号'''内的提示信息#当存在'''。。。'''在代码开头,后边却没有vizinfo.InfoPanel(),则场景无法导入	

text3D = viz.addText3D('3D Text',pos=[0,2.5,6],align=viz.ALIGN_CENTER_BOTTOM)

print "...",speed						#显示于调试窗口

#3.动态调节

#固定视角的两种方法
viz.mouse(viz.OFF)
viz.mouse.setScale( 0, 0)

text3D.addAction(vizact.spin(0,1,0,15))	#旋转

#相机
viz.MainView.setPosition([-3, 1, 0])
viz.MainView.move([-1, 1, 2])			#沿着向量a=[x,y,z]的方向移动|a|米
viz.MainView.setAxisAngle([0, 1, 0, 90])

#视角
#cam = vizcam.FlyNavigate()#鼠标决定方向,键盘wasd或上下左右决定移动,可以任意方向移动
cam = vizcam.WalkNavigate()#效果类似FlyNavigate,区别在于这个不改变相机高度,只能平东
cam = vizcam.KeyboardCamera()#ws前后移动,ad左右偏转
cam = vizcam.PanoramaNavigate()#点击鼠标右键不放开,移动鼠标,可以改变视角方向,但是不能移动

#粒子系统
fire = viz.addChild('fire.osg',pos=[0,1.8,2])
fire.hasparticles()#是火焰燃烧效果,没有爆炸效果,可以打开源文件来调

#添加人物角色
avatar = viz.addAvatar('getting started/vcc_male.cfg')
avatar.setPosition([2, 0, 0])#因为相机转了大约180°,所以x=2时看到的是左移2个单位
import math
SPEED = 0.5
def moveAvatar():
	t = viz.tick() * SPEED
	newX = -math.cos(t) * 2
	newZ = math.sin(t) * 2
	avatar.setPosition(newX, 0, newZ)
	avatar.setAxisAngle(0,1,0, t/math.pi * 180)#调角度
vizact.ontimer(0,moveAvatar)

#快捷键
#ctrl+t上下行对换

#4.调试
#view--->interactive打开调窗口
print "...",speed				#打印,内容显示于调窗口

#5.其他

#4.1圆坐标的生成
RADIUS=1
#取随机点
x = random.random() - 0.5
y = random.random() - 0.5
z = random.random() - 0.5
#计算随机点的模
length = math.sqrt(x*x + y*y + z*z)
#将随机点长度归一化再乘以圆的半径
x = x / length * RADIUS
y = y / length * RADIUS
z = z / length * RADIUS

#4.2杆的链接
c0 = viz.addChild('cylinder.wrl')#杆长0.5
c1 = viz.addChild('cylinder.wrl',parent=c0)
j1 = viz.addChild('joint.wrl',parent=c1)#链接节点
c1.setPosition([0, 0.5, 0])
j1.setPosition([0, 0.5, 0])#坐标需要调一下

#4.3函数调用
vizact.ontimer(0,f())
vizact.onbuttondown( Ball1White, f, 10 )#函数只写函数名
vizact.whilekeydown(viz.KEY_UP,move,avatars_speed)#函数只写函数名

#4.4打开碰撞检测
viz.collision(viz.ON)

#4.5显示网格、坐标系
import vizshape#用于显示网格等
grid = vizshape.addGrid()
grid.color(viz.RED)

world_axes = vizshape.addAxes()

#4.6变换的复制,link
viz.link(viz.MainView, arrow)#arrow获得MainView的位置、方向、变换
 
#4.7为四边形模型设置“无限平面”物理形状
ground=viz.addChild('tut_ground.wrl')
ground.collidePlane()

#4.8设置透明度
sphere.alpha(0.9)#数值越小越透明

#4.9同功能方法名
viz.addChild('...')#add是早期方法名,现在改用addChild
avatar.state(0)#state与idlepose功能相同,当state出现bug时换idlepose试试

#交线控制位移边界
info = viz.Scene2.intersect([0,0,0],[0,0,4])
if info.valid:
    print 'Intersected with object id:', info.object.id 
    print 'Intersected at location: ', info.point

#粒子系统----雨、雪等
precip = viz.add('precipitation.dle')
snow = precip.rain(.5)#rain改成snow是下雪,正常参数最大大概2.7

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值