【IdeaVR2019】使用时的小细节

【IdeaVR2019】使用时的小细节,第1张

系列目录


一、系列简介及软件介绍

二、界面简单介绍及场景配置文件介绍

三、基础功能小组协作使用时的注意事项

四、交互功能及python二次开发使用避坑


文章目录
  • 系列目录

  • 一、本系列介绍


  • 二、IdeaVR2019简介

      • (1)广泛的数据兼容
      • (2)更高效的创作流程
      • (3)更便捷的协同创作
      • (4)更灵活的UI控件
      • (5)更快捷的二次开发语言-python

  • 三、结尾



一、本系列介绍

本人是一个机械大学生,毕业设计是虚拟现实的仿真实验室,所用到的软件是上海曼恒公司的IdeaVR2019版本,迄今为止,它已经继2019版本之后产生了2020版本,2021版本,功能都比2019版本全面很多。



但为什么没有使用其他版本或者是unity3D还有UE4虚幻引擎等一些强有力且配套功能齐全的设备呢。


一个是因为IdeaVR2019版本支持Solidworks,Creo等工业软件模型的直接导入,而其它软件等需要3dmax进行转换,相对比较麻烦,另外我们学校实验室配备了相应的版本服务器,提供了专属的地方进行学习。


同时自己也对python相对熟悉一些,它又是支持python二次开发的,所以在进行调研,查找资料之后,选择IdeaVR2019作为我的毕业设计进行开发。


本系列的文章的目的是想记录下自己在学习这款软件的时候遇到的坑,因为其软件相应的教程不是很完善,资料也不是很容易查找,所以想记录一下自己在学习过程中的问题及解决办法。


如果自己有学弟学妹们再进行学习的时候可以减少他们摸索的时间,供他们参考。


特此说明:本系列文章不是教程,相应的教程请移步IdeaVR帮助文档以及相应的资料,由于在我的毕设时间里面里,python二次开发等功能也不是能够全部弄懂的,所以本篇文章旨在通过我们在探索过程中的一些问题解决办法示例来给学弟学妹们进行指导,帮助他们减少时间,去探索更进一步的功能。



下图为相应的调研与选择。




图1.1软件的调研与选择



二、IdeaVR2019简介

IdeaVR是一款为教育、医疗、商业等行业领域打造的虚拟现实引擎,相比其它国外引擎主要定位于游戏开发,需要专业程序开发人员,而IdeaVR是专门定位于行业VR内容开发,零编程基础的非专业人员也可以熟练掌握。


帮助行业用户解决在高风险、高成本、不可逆或不可及、异地多人等场景下的教学培训、模拟训练、营销展示等应用。


IdeaVR 能够协助学校老师制作专业教学课件、进行多人VR授课、科研验证,帮助学生进行作业设计、分享设计成果。


(1)广泛的数据兼容

在数据支持上,除了可导入建筑类BIM数据、工业类CAD数据和常见的OBJ等三维数据。




图2.1支持的类型

(2)更高效的创作流程

IdeaVR 2021 内置丰富的预设资源,包含基础模型库、环境库、粒子库、材质库以及人物角色库。


同时提供可复用的项目模板,其中已预设了基础场景、UI 菜单控制、VR 头盔交互和视频播放案例等完整的交互功能。


另外,资源商店中的工具类插件将持续更新,让不同行业的用户快速搭建出高品质的内容场景。




图2.2内置的资源

(3)更便捷的协同创作

支持场景拆分,通过将复杂场景拆分为多个子场景,可由多位开发人员同步协作开发,实现复杂的交互逻辑。


(4)更灵活的UI控件

支持平面UI和空间UI,用户可通过UI完成菜单选择、数据展示、场景切换、视频播放等交互逻辑,UI控件使用更灵活,实现系统级内容开发。


支持 PC、移动端以及Web发布,满足一般配置的计算机快速部署、使用。




图2.3 图形化UI交互编辑器

(5)更快捷的二次开发语言-python

内置工程文件,以及python模板案例,同时支持python第三方库的导入以及编辑。



下面是内置模板示例。


'''跳转到指定的目标位置'''


import IVREngine


def intersect(start, end):
    return IVREngine.getIntersectionValues(start, end)

def screen_to_world_pos(pos):
    ret = IVREngine.vec3(0)
    x, y = pos
    IVREngine.getScreenToPosition(int(x), int(y), ret)
    return ret

def world_to_screen_pos(pos):
    x = y = 0
    IVREngine.getScreenPosition(pos, x, y)
    return (x, y)

def get_mouse_intersect(multiplier=1000):
    start = IVREngine.getPlayer().getPosition()
    screen_pos = (IVREngine.getMouseX(), IVREngine.getMouseY())
    end = screen_to_world_pos(screen_pos)
    end += (end - start) * multiplier
    return intersect(start, end)

def get_node_by_mouse(multiplier=1000):
    _, _, _, node = get_mouse_intersect(multiplier) 
    return node


class JumpToTarget:
    def __init__(self):
        IVREngine.setType(IVREngine.ITR_NODE_TYPE.BIND_NODE)

    def Update(self):
        if IVREngine.getKey('j') and IVREngine.getMouseButtonDown(0):
            pos_target, _, _, node = get_mouse_intersect()
            if node is not None:
                pos_player = IVREngine.getPlayer().getPosition()
                pos_target += (pos_player - pos_target).normalize() * 3
                IVREngine.setPlayerPosition(pos_target)

三、结尾

由于我们是小组开发,所以我的一系列细节问题也会围绕着上面的五个点的介绍进行展开,去介绍一个小组开发过程中的问题与解决方法,避免走弯路,同时由于我的毕业设计还在进行阶段,我会陆陆续续进性更新介绍。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存