#素材记录
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
Vizard基础操作
于 2021-11-11 21:32:27 首次发布