【vizard】用python写3D游戏

【vizard】用python写3D游戏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),e

大家好,又见面了,我是你们的朋友全栈君。

vizard介绍

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.dy
    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. 草地背景

0909-1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141501.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月25日 下午7:00
下一篇 2022年5月25日 下午7:00


相关推荐

  • maven环境变量配置详细步骤(win10)

    maven环境变量配置详细步骤(win10)一、前言最近更新了系统,maven也想了想也需要装个新版本了,去下载了新版本,记录下maven的安装配置,初学小伙伴可以看看。安装前确认已经安装好了JDK,没有安装或下载的小伙伴可以参考我另外一篇文章原创jdk1.8下载与安装教程(win10),其它版本类似。安文件大家可以自己去官网下载,也可以直接在下面到我的网盘下载,官网向来下载速度都比较慢。目前版本是3.6.3版本,有新版本我也…

    2022年7月24日
    14
  • springboot 之 使用jasypt加密解密插件[通俗易懂]

    springboot 之 使用jasypt加密解密插件[通俗易懂]简单使用jasypt是一个java实现的安全框架1、该工具支持注解方式开启jasypt功能,以及注解方式引入一个或多个需要处理的配置文件。 2、该工具同时支持properties与yml文件的解析处理。 3、该工具支持自定义加解密类型和复写加解密方法。引入插件<dependency> <groupId>com.github.ulisesbocchio&…

    2026年4月13日
    8
  • 【JavaSE基础】学会区分和使用重载和重写

    【JavaSE基础】学会区分和使用重载和重写引言 大家好 我是执梗 我致力于写从 Java 基础开始向 JavaEE 进阶的 Java 知识 也会涉及到一些算法知识 有兴趣的伙伴可以一起关注交流 欢迎阅读我的 JavaSE 基础系列 今天为了大家讲解 Java 基础中比较重要的知识点 重载和重写 只有为什么要把它们两个放一起呢 因为很多人刚学总是傻傻分不清哈哈哈 其实它们的本质没多大关系 博客首页 执梗的博客 欢迎关注 点赞 收藏 留言 热爱 Java 学习 期待一起交流 作者水

    2026年3月19日
    1
  • @PostConstruct详解

    @PostConstruct详解定义 PostContruct 是 spring 框架的注解 在方法上加该注解会在项目启动的时候执行该方法 也可以理解为在 spring 容器初始化的时候执行该方法 从 JavaEE5 规范开始 Servlet 中增加了两个影响 Servlet 生命周期的注解 PostConstruc 和 PreDestroy 这两个注解被用来修饰一个非静态的 void 方法 用法 Post

    2026年3月26日
    2
  • ajax 跨域请求api_java跨域请求的三种方法

    ajax 跨域请求api_java跨域请求的三种方法让ajax请求访问servlet,可以让ajax请求跨域,通过直接本应用中的资源servlet,ajax可以不跨域访问本应用中的servlet,让java程序发送Get,Post请求,来访问2号服务器中的的servlet。ProxyServlet发送get请求,访问b站点TargerServlet,请求响应回来数据在进行响应。首先把架包导入创建lib目录,复制进去选中右键Addaslibrary。(2)ajax跨域解决方案之代理机制的代码实现。引入架包httpclient架包。…

    2022年8月24日
    8
  • Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能

    Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API 它提供了多种度量指标类型 Timers Guauges Counters 等 同时支持接入不同的监控系统 例如 Influxdb Graphite Prometheus 等 我们可以通过 Micrometer 收集 Java 性能数据 配合 Prometheus 监控系统实时获取数据 并最终在 Grafana 上展示出来 从而很容易实现应用的监控

    2026年3月20日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号