用 Python 写 3D 游戏,太赞了

举报
Python小二 发表于 2022/09/02 22:43:57 2022/09/02
【摘要】 vizard介绍 Vizard是一款虚拟现实开发平台软件,从开发至今已走过十个年头。它基于C/C++,运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时,Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI),进而运行渲染核心。 vizard入门 1、加载人物、对象、背景 av...

vizard介绍

Vizard是一款虚拟现实开发平台软件,从开发至今已走过十个年头。它基于C/C++,运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时,Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI),进而运行渲染核心。

fcd7f95f769f03068ae87209bac72f69.png

vizard入门

1、加载人物、对象、背景


   
  1. avatar = viz.addAvatar('xxx.cfg', pos=(0,0,0), euler=(0,0,0))
  2. viz.add('xxx.osgb',pos=(0,0,0), euler=(0,0,0))
  3. viz.addChild('xxx.obj',pos=(-4,0,7.5))

2、鸽子随机漫步

①利用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑟𝑎𝑛𝑑𝑓𝑙𝑜𝑎𝑡()生成随机位置,调用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑤𝑎𝑙𝑘𝑇𝑜()实现鸽子漫步

②利用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑐ℎ𝑜𝑖𝑐𝑒()生成随机选择,随机更新鸽子的𝑠𝑡𝑎𝑡𝑒状态

③调用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑤𝑎𝑖𝑡𝑡𝑖𝑚𝑒()实现随机时间的等待

④利用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒()实现上述动作序列


   
  1. pigeon = viz.addAvatar('pigeon.cfg',pos=(2,0,5))
  2. random_walk = vizact.walkTo(pos=[vizact.randfloat(1.5,2.5),0,vizact.randfloat(4.5,5.5)])
  3. random_animation = vizact.method.state(vizact.choice([1,3],vizact.RANDOM))
  4. random_wait = vizact.waittime(vizact.randfloat(2.0,8.0))
  5. pigeon_idle = vizact.sequence( random_walk, random_animation, random_wait, viz.FOREVER)
  6. pigeon.runAction(pigeon_idle)

3、人物谈话动作


   
  1. def PersonTalk():
  2. female = viz.addAvatar('vcc_female.cfg', pos=(1,0,8), euler=(-90,0,0))
  3. male = viz.addAvatar('vcc_male2.cfg', pos=(0,0,8), euler=(90,0,0))
  4. female.state(14)
  5.   male.state(4)

4、角色移动

①通过𝑣𝑖𝑧. 𝑔𝑒𝑡𝐹𝑟𝑎𝑚𝑒𝐸𝑙𝑎𝑝𝑠𝑒𝑑() ∗ 𝑠𝑝𝑒𝑒𝑑计算移动速度

②初始化欧拉矩阵𝑚1 = 𝑣𝑖𝑧. 𝑀𝑎𝑡𝑟𝑖𝑥. 𝑒𝑢𝑙𝑒𝑟(0,0,0)

③通过𝑣𝑖𝑧. 𝑘𝑒𝑦. 𝑖𝑠𝐷𝑜𝑤𝑛()分析对应鼠标事件,根据人物朝向𝑎𝑣𝑎𝑡𝑎𝑟. 𝑔𝑒𝑡𝐸𝑢𝑙𝑒𝑟()更 新𝑚1平移变换矩阵

④通过𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑒𝑡𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛(𝑚1. 𝑔𝑒𝑡𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛())更新人物位置

⑤通过𝑣𝑖𝑧. 𝑘𝑒𝑦. 𝑖𝑠𝐷𝑜𝑤𝑛()分析对应鼠标事件,设置对应人物动画:

前进、后退动画:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(2)

左跨步动画:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(12)

右跨步动画:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(13)

人物静止动画:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(1)


   
  1. def roleMove():
  2. m1 = viz.Matrix.euler(0,0,0)
  3. dm = viz.getFrameElapsed() * speed
  4. temp=avatar.getEuler()[0]*math.pi/180
  5. if viz.key.isDown('w'):
  6. m1.preTrans([dm*math.sin(temp),0,dm*math.cos(temp)])
  7. avatar.state(2)
  8. elif viz.key.isDown('s'):
  9. m1.preTrans([-dm*math.sin(temp),0,-dm*math.cos(temp)])
  10. avatar.state(2)
  11. elif viz.key.isDown('a'):
  12. m1.preTrans([-dm*0.3*math.cos(temp),0,dm*0.3*math.sin(temp)])
  13. avatar.state(12)
  14. elif viz.key.isDown('d'):
  15. m1.preTrans([dm*0.3*math.cos(temp),0,-dm*0.3*math.sin(temp)])
  16. avatar.state(13)
  17. else:
  18. avatar.state(1)
  19.   avatar.setPosition(m1.getPosition(), viz.REL_PARENT)

5、获取鼠标位移

通过回调函数callback获取


   
  1. def onMouseMove(e):
  2. global mp_x,mp_y
  3. mp_x=e.dx
  4. mp_y=e.dy
  5. viz.callback(viz.MOUSE_MOVE_EVENT,onMouseMove)

基于vizard实现的效果:

1.时钟显示当前系统时间

2.两个谈话小人(带动画)

3.第三人称漫游(带动画)

  1. 前进(键盘 W 键)

  2. 后退(键盘 S 键)

  3. 左跨步(键盘 A 键)

  4. 右跨步(键盘 D 键)

  5. 旋转(使用鼠标左右平移)

  6. 上仰(使用鼠标上下平移)

4.其他三维物体/背景

  1. 鸽子做自由漫步

  2. 花瓶摆件

  3. 天空背景

  4. 草地背景

6623bf02f8d208b69c01d474f7f26b34.png


   
  1. 推荐阅读  点击标题可跳转
  2. Python学习手册
  3. Pandas学习大礼包
  4. 100+Python爬虫项目
  5. Python数据分析入门手册
  6. 浙江大学内部Python教程
  7. 240个Python练习案例附源码
  8. 70个Python经典实用练手项目
  9. 整理了30款Python小游戏附源码

文章来源: ityard.blog.csdn.net,作者:Python小二,版权归原作者所有,如需转载,请联系作者。

原文链接:ityard.blog.csdn.net/article/details/126654012

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。