借助vizard创建虚拟现实环境
杜致远

设备:HTC VIVE

软件:vizard、steamVR

inspector(场景编辑器)、coding(逻辑)、配置&连接显示设备

DEMO

  • demo_lancher —— 选择vive的配置文件 —— 校准中心点 —— 校准地面(尽可能准确)

创建流程

使用前先使用steamVR校准设备。

  1. 使用insepctor搭建/设定场景模型。
  2. 点开vizard,选择vizconnet生成配置文件(.pyc)
  3. 新建项目,将配置文件绑定到当前
  4. 导入场景
  5. 写逻辑部分,直接在vizard中运行调试

Inspector

可对场景模型进行设定

coding

  • vizard不支持mac
  • pack:viz、vizact、vizshape
  • 如何把代码和场景绑定?无需绑定,inspector中编辑场景即可,IDE中编辑逻辑
  • ontimer函数
  • 文档在哪里:官方文档
  • 场景文件:.osgb

  • 左手坐标系,大拇指、食指、中指分别为:xyz轴

  • 可查阅文档

  • 基础操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    import viz
    import vizact
    import vizshape

    # 创建场景
    viz.go()
    # 加载自带的piazza场景
    piazza = viz.add("piazza.osgb")

    # 抗锯齿等级,可根据机器性能调整
    viz.setMultiSample(4)

    # 添加坐标轴显示
    vizshape.addAxes()
    # 添加碰撞效果(会把位置置为水平
    viz.MainView.collision()

    # 位置、视角、视场角设置
    viz.MainView.setPosition([0,15,-15])
    viz.MainView.move([0,1,1])
    viz.MainView.setEuler([180,0,0])
    viz.fov(30)

    # 添加自带的植物模型
    plant = viz.addChild('plant.osgb')

    plants = []
    for x in [-3,1,1,3]:
    for z in [4,2,0,-2,-4]:


    #旋转,参数:xyzs,沿xyz轴以s速度旋转
    mySpin = vizact.spin(0,1,0,15)
    plant.addAction(mySpin)

    # 停止动作
    def myClearAction(plantOBJ):
    plantOBJ.clearactions()

    # 旋转函数,旋转然后停止旋转
    def mySpinPlant(plantOBJ):
    plantOBJ.addAction(mySpin)
    vizact.ontimer2(1,1,myClearAction, plantOBJ)

    # 1s一次,执行19次mySpinPlant函数,vizact.choice会顺序选择plant数组里的内容
    vizact.ontimer2(1,19, mySpinPlant, vizact.choice(plants))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import viz
import vizinput

# 创建输入窗口
username = vizinput.input('请输入您的名字')
sex = vizinput.input('性别')
age = vizinput.input('年龄')

# 把实验对象的信息存入文档中
filename = viz.res.getPublishPath(username + '_data.txt')
file = open(filename, 'w')
line = username + sex + age
with open(file) as f:
f.write(line)

# 保存时间戳和位置信息
def saveData():
currentTime = viz.tick() #时间戳
pos = viz.MainView.getPosition()

line = str(currentTime) + '\t' + str(pos)
file.write(line)

# 0表示一直执行
vizact.onupdate(0, saveData)

viz.setMultiSample(4)
piazza = viz.add('piazza.osgb')
viz.go()
male = viz.addAvatar('vcc_male.cfg')
male.setPosition([2,0,0])
# 设置人物的状态(会有动作)
male.state(14)

female = viz.add('vcc_female.cfg')
female.setPosition([1,0,0])

global stateID
stateID = 0

# 做一遍所有的动作
def showAllState(myAvatar):
global stateID
myAvatar.state(stateID)
stateID += 1

vizact.ontimer2(3,15, showAllState, male)

# 走动函数
def walkAvatars():
walkFemale = vizact.walkTo([4,0,0])
vizact.ontimer2(0.5, 0 , female.addAction(walkFemale), female)
walkMale = vizact.walkTo([4,0,0])
male.addAction(walkMale)

vizact.onkeydown('w', walkAvatars)

vizconnet

​ 生成配置文件,添加到viz.go()

明天:脑电仪