【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ribbon的负载均衡策略_f5负载均衡配置

    ribbon的负载均衡策略_f5负载均衡配置在这里吐槽一句:网上很多文章真是神坑,你不看还好,看了只会问题越来越多,就连之前的问题都没有解决!!!不多说了,Ribbon作为后端负载均衡器,比Nginx更注重的是请求分发而不是承担并发,可以直接感知后台动态变化来指定分发策略。它一共提供了7种负载均衡策略:策略名策略声明策略描述实现说明

    2022年10月13日
    2
  • Android浏览器的插件渲染模式简介

    Android浏览器的插件渲染模式简介简单介绍了Android浏览器的插件渲染模式(bitmap模式和surface模式)

    2022年5月14日
    46
  • ■ Android 集成环信android.support.v4.view不存在

    ■ Android 集成环信android.support.v4.view不存在

    2021年3月12日
    164
  • wing是什么_数独代码

    wing是什么_数独代码原题链接设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。输入格式第一行为一个整数N,表示 N×N 的方格图。接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。行和列编号从

    2022年8月9日
    5
  • django debug_怎么调试debug

    django debug_怎么调试debug介绍Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息。应用1.安装

    2022年7月29日
    13
  • java interface接口和多继承[通俗易懂]

    java interface接口和多继承[通俗易懂]很长时间不能很好解释多继承,今天看到一个特别好的解释,大快! 以下是引用:我认为你好像是不明白接口怎么用?也就是不明白为什么要定义那么多接口然后再用类去一个个继承他们。我跟你举个游戏的例子吧:这里有一个游戏,人猿泰山。主角是一个单独的类,这里我们主要用怪物说明接口的用法:怪物有很多种,按地域分:有的在天上飞,有的在地上跑,有的在水里游按攻击方式分:有的能近距离物理攻击,有的能

    2022年7月16日
    16

发表回复

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

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