大家好,又见面了,我是你们的朋友全栈君。
vizard介绍
Vizard是一款虚拟现实开发平台软件,从开发至今已走过十个年头。它基于C/C++,运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时,Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI),进而运行渲染核心。
vizard入门
-
加载人物、对象、背景
avatar = viz.addAvatar('xxx.cfg', pos=(0,0,0), euler=(0,0,0)) viz.add('xxx.osgb',pos=(0,0,0), euler=(0,0,0)) viz.addChild('xxx.obj',pos=(-4,0,7.5))
-
鸽子随机漫步
①利用??????. ?????????()生成随机位置,调用??????. ??????()实现鸽子漫步
②利用??????. ?ℎ????()生成随机选择,随机更新鸽子的?????状态
③调用??????. ????????()实现随机时间的等待
④利用??????. ????????()实现上述动作序列
pigeon = viz.addAvatar('pigeon.cfg',pos=(2,0,5)) random_walk = vizact.walkTo(pos=[vizact.randfloat(1.5,2.5),0,vizact.randfloat(4.5,5.5)]) random_animation = vizact.method.state(vizact.choice([1,3],vizact.RANDOM)) random_wait = vizact.waittime(vizact.randfloat(2.0,8.0)) pigeon_idle = vizact.sequence( random_walk, random_animation, random_wait, viz.FOREVER) pigeon.runAction(pigeon_idle)
-
人物谈话动作
def PersonTalk(): female = viz.addAvatar('vcc_female.cfg', pos=(1,0,8), euler=(-90,0,0)) male = viz.addAvatar('vcc_male2.cfg', pos=(0,0,8), euler=(90,0,0)) female.state(14) male.state(4)
-
角色移动
①通过???. ???????????????() ∗ ?????计算移动速度
②初始化欧拉矩阵?1 = ???. ??????. ?????(0,0,0)
③通过???. ???. ??????()分析对应鼠标事件,根据人物朝向??????. ????????()更 新?1平移变换矩阵
④通过??????. ???????????(?1. ???????????())更新人物位置
⑤通过???. ???. ??????()分析对应鼠标事件,设置对应人物动画:
- 前进、后退动画:??????. ?????(2)
- 左跨步动画:??????. ?????(12)
- 右跨步动画:??????. ?????(13)
- 人物静止动画:??????. ?????(1)
def roleMove(): m1 = viz.Matrix.euler(0,0,0) dm = viz.getFrameElapsed() * speed temp=avatar.getEuler()[0]*math.pi/180 if viz.key.isDown('w'): m1.preTrans([dm*math.sin(temp),0,dm*math.cos(temp)]) avatar.state(2) elif viz.key.isDown('s'): m1.preTrans([-dm*math.sin(temp),0,-dm*math.cos(temp)]) avatar.state(2) elif viz.key.isDown('a'): m1.preTrans([-dm*0.3*math.cos(temp),0,dm*0.3*math.sin(temp)]) avatar.state(12) elif viz.key.isDown('d'): m1.preTrans([dm*0.3*math.cos(temp),0,-dm*0.3*math.sin(temp)]) avatar.state(13) else: avatar.state(1) avatar.setPosition(m1.getPosition(), viz.REL_PARENT)
-
获取鼠标位移
通过回调函数
callback
获取def onMouseMove(e): global mp_x,mp_y mp_x=e.dx mp_y=e.dy viz.callback(viz.MOUSE_MOVE_EVENT,onMouseMove)
基于vizard实现的效果:
- 时钟显示当前系统时间
- 两个谈话小人(带动画)
- 第三人称漫游(带动画)
- 前进(键盘 W 键)
- 后退(键盘 S 键)
- 左跨步(键盘 A 键)
- 右跨步(键盘 D 键)
- 旋转(使用鼠标左右平移)
- 上仰(使用鼠标上下平移)
- 其他三维物体/背景
- 鸽子做自由漫步
- 花瓶摆件
- 天空背景
- 草地背景
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141501.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...