如何用python编写3D游戏

news2024/11/15 9:04:42

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.coloradmin.cn/o/731712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当型循环和直到型循环(精讲)

目录 背景概念当型循环直到型循环 二维表对比图示与代码当型循环流程图N-S图(盒图) 直到型循环流程图N-S图(盒图) 例子当型图示代码 直到型图示代码 Do–Loop 和For –Next相同点:不同点:代码 总结 背景 两…

day02 重新学python——判断语句和循坏语句

文章目录 一、python中的判断语句1.布尔类型和比较运算符2.if语句的基本格式3.if else 语句4.if elif else 语句5.判断语句的嵌套6.实战案例 二、循环语句1.while循环的基础语法2.while循环的基础案例3.while循环的嵌套应用4.while循环的嵌套案例5.for循环的基础语法6.for循环的…

【计算机网络】第三章 数据链路层(点对点协议 媒体介入控制)

文章目录 3.5 点对点协议PPP3.6 媒体接入控制3.6.1 媒体接入控制的基本概念3.6.2 媒体接入控制——静态划分信道3.6.3 随机接入——CSMA/CD协议3.6.4 随机接入——CSMA/CA协议 3.5 点对点协议PPP 点对点协议是目前使用最广泛的点对点数据链路层协议。PPP协议为在点对点链路传输…

JAVA Email

Email就是电子邮件。电子邮件的应用已经有几十年的历史了,我们熟悉的邮箱地址比如aaaa22222163.com,邮件软件比如Outlook、网易闪电邮、Foxmail都是用来收发邮件的。当然,使用Java程序也可以收发电子邮件。 传统的邮件就是通过邮局投递&#…

目标检测+车道线识别+追踪+测距(代码+部署运行)

目标检测车道线识别追踪测距 本文主要讲述项目集成:从车道线识别、测距、到追踪,集各种流行模型于一体! 不讲原理,直接上干货! 把下文环境配置学会,受益终生! 各大项目皆适用! …

具有音调控制功能的25W混合式Hi—Fi放大器

现代电子技术应用中电子管的使用虽然已经较少,但由于电子管有晶体管不可替代的一些优越特性,所以在部分领域特别是音响电路中还受到人们的亲睐。这是一款由“靓”音电子管和音响集成电路联合组成的混合放大器。该放大器由电子管作前级,音响专…

7.8(wmi命令+ServiceName+CobaltStrike Loader)

优先级,进程ID,线程计数 优先级(Priority)是操作系统对进程或线程分配处理器资源的重要性排序。较高的优先级意味着进程或线程更有可能在竞争处理器资源时被调度执行。 进程ID(Process ID)是唯一标识系统中…

Python读取Excel文件并复制指定的数据行

本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法。 首先,我们来明确一下本文的具体需求。现有一个Excel…

【Java】Netty中closeFuture添加监听事件示例

1. 需求 客户端向服务端发送信息,服务端将信息打印客户端接收键盘输入到信息循环向服务端发送信息客户端接收键盘输入‘q’时关闭 2.服务端代码 import io.netty.bootstrap.ServerBootstrap;在这里插入代码片 import io.netty.buffer.ByteBuf; import io.netty.c…

新开普智慧校园系统RCE漏洞复现(0day)

0x01 产品简介 新开普智慧校园体系基于业务、数据双中台理念,建立共享开放能力平台,实现能力开放和服务与数据的全生命周期治理;基于一云多端,混合云服务模式,覆盖管理、生活、教学、科研和社会化服务全场景&#xff0…

【网络】HTTPS协议原理

目录 “加密”相关概念 为什么要加密 常见加密方式 对称加密 非对称加密 HTTPS工作过程探究 方案1-只使用对称加密 方案2-只使用非对称加密 方案3-客户端和服务端双方都使用非对称加密 方案4-非对称加密 对称加密 上述方案问题分析 方案5-证书认证 非对称加密对…

代码随想录二刷day46 | 动态规划之139.单词拆分

day46 139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满…

原来Linux里也能打《ACM》?

本文,我们来介绍一下Linux中的ACM时间,不过呢此ACM非彼acm,让我们一起来看看吧 前言 我们在写Makefile的时候,经常会遇到make: xxx is up to date.的问题,很多同学都不知道是什么原因,本文我们就从这一点说…

如何查看某个学者近些年发表的论文

Search more papy by the author 在谷歌学术上搜索,输入学者的名字,就会出来所有的期刊,文章题目、发表时间、相关作者等信息。 例如, 在下面的网址中,展示了学者发表的论文详情 https://scholar.google.com/citat…

C++常用库函数 6.进程控制函数

函数名&#xff1a;exit 函数原型&#xff1a;void exit(int status)&#xff1b; 参数&#xff1a;status 退出状态。 所需头文件&#xff1a;<cstdlib> 功能&#xff1a;终止进程。函数名&#xff1a;system 函数原型&#xff1a;int system(const char*command) …

103、基于STM32单片机智能两轮双轮自平衡小车 蓝牙手机APP控制系统设计(程序+原理图+PCB源文件+硬件芯片资料等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

【网络安全带你练爬虫-100练】第10练:re的正则匹配、文件夹创建、图片下载

目录 一、目标1&#xff1a;正则匹配图片的URL 二、目标2&#xff1a;创建文件夹 三、目标3&#xff1a;保存图片到test文件夹中 四、网络安全小圈子 一、目标1&#xff1a;正则匹配图片的URL URL位置 我们可以找到img都在这个标签里面 请求方法GET 提取URL位置 需要掌握…

【算法 -- LeetCode】(12)整数转罗马数字

1、题目 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

【源码】vue2+element+laravel8开发不良事件上报系统源码

系统概述&#xff1a; 医院不良事件报告系统为医院内质量控制、患者安全关注、医疗安全不良事件方面的精细化的管理提供了平台&#xff0c;是等级医院评审的必备内容&#xff0c;评审要求医院直报系统要与卫生部“医疗安全(不良)事件报告系统”建立网络对接。 不良事件报告系统…

微信小程序WebView嵌入别人网页的解决办法

写在前面&#xff0c;小程序必须是热认证的企业小程序&#xff0c;个人小程序不支持WebView组建。 方法一&#xff1a; 在做微信小程序开始时&#xff0c;大家都能遇到&#xff0c;WebView组件使用的URL必须要在小程序的后台设置业务域名&#xff0c;并且在对应域名服务器根目…