如何用python编写3D游戏

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

vizard入门

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

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))

2、鸽子随机漫步

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

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

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

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

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)

3、人物谈话动作

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)

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)

5、获取鼠标位移

通过回调函数callback获取。

def onMouseMove(e):     global mp_x,mp_y    mp_x=e.dx    mp_y=e.dyviz.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. 草地背景

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13572.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb连接安卓模拟器或真机hook参数加密详细过程(frida)

app逆向时,参数与函数的确定很关键,找到可疑的函数,不确定是否由该函数生成,该怎么解决?hook就应允而生了,首先是要求本地电脑和安卓模拟器(网易mumu模拟器支持多系统,该模拟器作为主…

从OVF矢量场文件中获取磁斯格明子的位置和半径的粗略方法(trace skyrmion)

文章目录 前言一、使用oommf的avf2odt命令行程序获取斯格明子中心位置的示例二、当磁体系的单个xy平面层仅有一个斯格明子的情况1.读取所有磁化文件中的指定磁化分量2.筛选出每一个xy平面层中位于磁化分量阈值范围内的单元格3.计算组成磁结构的所有单元格的平均坐标和平均距离 …

Vue:Elemenu-Plus递归型菜单组件封装

前端开发中,经常遇到需要与后端配置,前端动态渲染菜单的应用场景,而究其本质,就是菜单组件的应用,只是在不确定菜单级数的情况下,我们需要对组件做一个递归处理,让它能够适应大多数应用场景。 递…

支持向量机SVM代码详解——多分类/降维可视化/参数优化【python】

篇1:SVM原理及多分类python代码实例讲解(鸢尾花数据) SVM原理 支持向量机(Support Vector Machine,SVM),主要用于小样本下的二分类、多分类以及回归分析,是一种有监督学习的算法。基本思想是寻…

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单 在之前实现了flutter聊天界面的富文本展示内容,这里记录一下当长按聊天气泡的时候弹出复制、删除等菜单功能 一、查看效果 当长按聊天气泡的时候弹出复制、删除等菜单,可新增更多按钮 二、代码实现…

leetcode 222. 完全二叉树的节点个数

2023.7.3 用层序遍历遍历一遍二叉树&#xff0c;然后遍历的每个节点都进行一次计数&#xff0c;直接上代码&#xff1a; class Solution { public:int countNodes(TreeNode* root) {queue<TreeNode*> que;int ans 0;if(root nullptr) return ans;que.push(root);while…

风力发电系统的随机调度研究(matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

面向订单交付的ETO项目管理数字化解决方案︱高远科技PMO副总经理董方好

北京高远华信科技有限公司PMO副总经理董方好先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;面向订单交付的ETO项目管理数字化解决方案。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 订单…

基于matlab开发和评估停车场场景中的视觉定位算法(附源码)

一、前言 本示例展示了如何使用虚幻引擎模拟环境中的合成图像数据开发视觉定位系统。 获取基本事实以评估定位算法在不同条件下的性能是一项具有挑战性的任务。与使用高精度惯性导航系统或差分GPS等更昂贵的方法相比&#xff0c;不同场景下的虚拟仿真是一种经济高效的方法来获…

电脑免费简单又好用的记事本app软件推荐

很多职场人士在办公时都需要用到电脑&#xff0c;在电脑上有很多好用的工具软件可以用来辅助工作的展开&#xff0c;其中记事本类的App就有不少优质软件存在。那电脑免费简单又好用的记事本app软件推荐哪些呢&#xff1f;这里小编就以自己的Windows10电脑为例&#xff0c;为大家…

MCU是否会从ADAS域控制器消失

摘要&#xff1a; ADAS架构及MCU功能概览、未来ADAS架构的两种方案、MCU是否从ADAS域消失的一点思考 ADAS的装机量和渗透率再提升&#xff0c;尤其L2及L2级&#xff1b;那么随着ADAS域控制器主控芯片的增强&#xff0c;未来&#xff0c;MCU是否还会存在&#xff1f; 转自佐思汽…

网络编程4——传输层TCP协议的三大安全机制:三次握手四次挥手+确认应答机制+超时重传机制

文章目录 前言一、TCP协议段与机制TCP协议的特点TCP报头结构TCP协议的机制与特性 二、TCP协议的 连接管理机制 TCP建立连接&#xff1a;三次握手 TCP断开连接&#xff1a;四次挥手 三、TCP协议的 确认应答机制 四、TCP协议的 超时重传机制 总结 前言 本人是一个刚刚上路的I…