VR硬件SDK开发基础第一天

238 阅读4分钟

一、课程安排

image.png

二、虚拟现实概述

1.虚拟现实技术

虚拟现实技术(英文名称:Virtual Reality,缩写为VR),又称虚拟实境或灵境技术,是20世纪发展起来的一项全新的实用技术。虚拟现实技术囊括计算机、电子信息仿真技术,其基本实现方式是以计算机技术为主,利用并综合三维图形技术、多媒体技术、仿真技术、显示技术、伺服技术等多种高科技的最新发展成果,借助计算机等设备产生一个逼真的三维视觉、触觉、嗅觉等多种感官体验的虚拟世界,从而使处于虚拟世界中的人产生一种身临其境的感觉 [9]  。随着社会生产力和科学技术的不断发展,各行各业对VR技术的需求日益旺盛。VR技术也取得了巨大进步,并逐步成为一个新的科学术领域。 [1] 

2.虚拟现实硬件技术产业链

image.png

3.虚拟现实应用领域

虚拟现实技术主要应用于教育、军事、工业、艺术与娱乐、医疗、城市仿真、科学计算可视化等领域。

由于能够再现真实的环境,并且人们可以介入其中参与交互,使得虚拟现实系统可以在许多方面得到广泛应用。随着各种技术的深度融合,相互促进,虚拟现实技术在教育、军事、工业、艺术与娱乐、医疗、城市仿真、科学计算可视化等领域的应用都有极大的发展。

传统的教育方式,通过印在书本上的图文与课堂上多媒体的展示来获取知识,这样学习一会儿就渐显疲惫,学习效果较差,然而玩过英雄联盟的同学都知道此游戏为什么如此吸引人,本质就是回到场景,参与其过程。

虚拟现实技术能将能将三维空间的事物清楚的表达出来,能使学习者直接,自然地与虚拟环境中的各种对象进行交互作用。并通过多种形式参与到事件的发展变化过程中去,从而获得最大的控制和操作整个环境的自由度。

三、HTC Vive

1.HTC Vive简介

image.png

2.HTC Vive主体硬件

image.png

3.HTC Vive主机配置

image.png

4.HTC Vive软件配置

Steam平台官网 store.steampowered.com/

image.png

image.png

5.Steam VR

1.Steam VR和OpenVR的关联

image.png

2.Steam VR支持的平台

image.png

3.Steam VR plugin目录结构

image.png

Plugins
    /*这个文件夹存放一些Steam VR的信息*/
    ——penvr_api.bundle       
        ——Contents
        /*Steam VR底层的c++文件*/
        ——x86            
        /*SteamVR C#调用底层c++的接口*/
        openvr_api.cs         
SteamVR
    /*这个目录下的脚本都是用来定制SteamVR插件中某些脚本在Unity中的Inspector界面及功能的*/
    ——Editor             
        /*定制SteamVR_Camera.cs这个脚本在Inspector中的显示效果*/
        SteamVR_Editor.cs
        /*定制SteamVR_RenderModel.cs脚本在Inspector中的功能*/
        SteamVR_RenderModelEditor.cs     
        /*定制SteamVR_SkyBox.cs在Inspector中显示的属性*/
        SteamVR_SkyboxEditor.cs    
        /*用来检查插件的更新*/  
        SteamVR_Update.cs       
    /*这个文件夹下面放着一些工具脚本*/        
    ——Extras    
        /*这个脚本用来检测物体是否被用户所凝视*/         
        SteamVR_GazeTracker.cs     
        /*通过手柄指向来产生一条激光束*/
        SteamVR_LaserPointer.cs         
        /*示例场景中扔物体的脚本*/
        SteamVR_TestThrow.cs      
        /*示例场景中跟踪相机的脚本*/
        SteamVR_TestTrackedCamera.cs  
    /*存放示例demo的材质体*/  
    ——Materials
    /*存放SteamVR预制体*/  
    ——Prefabs
        /*相机预制体*/ 
        [CameraRig]
        /*状态相关的overlay显示预制体*/ 
        [Status]
        /*SteamVR_Render预制体*/ 
        [SteamVR]
    /*一些自带的shader*/ 
    ——Resources
    ——Scenes
    /*SteamVR核心脚本*/ 
    ——Scripts
        /*SteamVR的封装类*/
        SteamVR.cs
        /*SteamVR的核心相机类*/
        SteamVR_Camera.cs
        /*SteamVR相机翻转*/
        SteamVR_CameraFlip.cs
        /*SteamVR相机网格隐藏*/
        SteamVR_CameraMask.cs
        /*声音控制类*/
        SteamVR_Ears.cs
        /*外部相机*/
        SteamVR_ExternalCamera.cs
        /*场景进行渐显或者渐隐的类*/
        SteamVR_Fade.cs
        /*跟踪设备的扫描范围*/
        SteamVR_Frustum.cs
        /*关节反身运动*/
        SteamVR_IK.cs
        /*场景切换类*/
        SteamVR_LoadLevel.cs
        /*菜单类*/
        SteamVR_Menu.cs
        /*overly封装类*/
        SteamVR_Overlay.cs
        /*运动区域*/
        SteamVR_PlayArea.cs
        /*Vive渲染流程控制的核心类*/
        SteamVR_Render.cs
        /*设置天空盒*/
        SteamVR_Skybox.cs
        /*做球形投影的类*/
        SteamVR_SphericalProjection.cs
        /*头盔上的前置相机*/
        SteamVR_TrackedCamera.cs
        /*跟踪设备管理类*/
        SteamVR_TrackedObject.cs
        /*工具类,包括事件系统,Transform等等*/
        SteamVR_Utils.cs
    /*常用的纹理*/
    ——Textures
复制代码

4.SteamVR中的动作(Action)

image.png

1.input动作编辑窗口

image.png

2. SteamVR的动作类型

image.png

3.添加一个新动作

image.png

5.将动作与控制器的按键进行绑定

image.png

image.png

image.png

设置默认值并添加fire动作并保存个人按键设置

image.png

打开InteractionSystem文件夹中的场景进行测试

image.png

打开测试窗口判断动作是否被绑定

image.png

6.通过脚本获取SteamVR2.x中动作的输入

1.基本Action类和动作类型的比较

image.png

2.脚本编辑监听动作变化

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR;//引入StreamVR的命名空间  

public class ActionDemo : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //第一种方式使用动作类上的事件监听函数对动作进行监听
        SteamVR_Actions.default_fire.AddOnStateUpListener(fireAttack,SteamVR_Input_Sources.Any);//参数一表示事件函数,参数二表示监听对应触发的控制器按键
        //第二种方式使用添加事件的方式 
        SteamVR_Actions.default_fire.onStateUp += onFireAttack;
    }

    private void onFireAttack(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)
    {
        print($"由事件处理,{fromSource}触发");
    }

    private void fireAttack(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)//参数一表示获取到的动作,参数二表示触发的按键
    {
        print($"由事件处理,{fromSource}触发");
    }

}

作者:用户8922541182901
链接:juejin.cn/post/720447…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。