HTC VIVE TouchPad简单方向控制
来源:互联网 发布:电信网络架构 编辑:程序博客网 时间:2024/05/23 10:59
由于现在还没有设备,没法亲身体会,只能先想象一下了。
好进入正题 首先引入叉积 的数学概念
叉积
叉积的定义: c =a x b 其中a,b,c均为向量。即两个向量的叉积得到的还是向量!
性质1: c⊥a,c⊥b,即向量c垂直与向量a,b所在的平面 。
性质2: 模长|c|=|a||b|sin<a,b>
性质3: 满足右手法则 。从这点我们有axb ≠ bxa,而axb = – bxa。所以我们可以使用叉积的正负值来判断向量a,b的相对位置,即向量b是处于向量a的顺时针方向还是逆时针方向。
根据上面的性质2,我们也同样的可以计算出两个向量的夹角。
用到了性质三进行计算方向。引入控制器控制代码。
using System.Collections;using System.Collections.Generic;using UnityEngine;using Valve.VR;public class NewBehaviourScript : MonoBehaviour { void check_key_toMove() { //获取右手控制器设备 SteamVR_Controller.Device _device = SteamVR_Controller.Input((int)track.index); //检测是否按压控制器的touchpad bool isPressTouchPad= _device.GetPress(SteamVR_Controller.ButtonMask.Touchpad); float angle = 0f; //如果按了 if (isPressTouchPad) { //获取按压点的坐标 Vector2 touchaxis= _device.GetAxis(); //产生a为参考系 Vector2 a = new Vector2(0f, 1f); //进行角度计算(没有正负值不能区分方向) angle = Vector2.Angle(a, touchaxis); //叉积运算计算触摸点向量相对a是顺时针(cross.z为负)还是逆时针(cross.z为正) Vector3 cross = Vector3.Cross(a, touchaxis); angle = cross.z > 0 ? -angle : angle; if (angle <= 45 && angle > -45) { transform.forward = Vector3.forward; } else if (angle <= -45 && angle > -135) { transform.forward = Vector3.left; } else if (angle <= -135 || angle > 135) { transform.forward = Vector3.back; } else if (angle <= 135 && angle > 45) { transform.forward = Vector3.right; } } }}
1 0
- HTC VIVE TouchPad简单方向控制
- HTC Vive controller手柄运动方向识别
- HTC Vive controller手柄运动方向识别
- HTC Vive手柄圆盘控制角色移动
- Unity +HTC VIVE 虚拟现实开发— 手柄控制
- HTC vive开发:关于手柄按键对接控制
- HTC vive开发:关于手柄按键对接控制
- 酷科技 | HTC Vive可控制丰田人形机器人
- 【VR开发】htc vive+unity 3D 简单保龄球游戏
- 使用UE4实现HTC Vive设备的简单操作
- HTC Vive UI Guideline
- HTC Vive全屏
- HTC VIVE 开发 移动
- Unity开发HTC VIVE
- HTC Vive 抗锯齿
- HTC Vive基础
- HTC Vive Unity 教程
- HTC VIVE 常见问题集合
- 文件夹和文件压缩
- http-状态码
- Java基础--容器(1)
- Android内存泄漏分析
- 【jzoj3117】【WinterCamp 2013】【模积和】【分块】【扩展欧几里得】
- HTC VIVE TouchPad简单方向控制
- HTTP 常见状态码
- Eclipse如何更改maven项目名
- Java enum的用法详解
- 项目经理自我修炼之路——记于超图项目经理培训大会2017
- 一些小问题
- 八、不要对外公开泛型List成员
- ubuntu 命令行开启 vpn
- 数据的五种存储方式