当前位置: 首页 > news >正文

二七网站建设wordpress4.9.8 特别慢

二七网站建设,wordpress4.9.8 特别慢,设计一个企业网站首页,wordpress lucene前言 最近在做一个工作需要用到PICO4 Enterprise VR头盔里的眼动追踪功能#xff0c;但是遇到了如下问题#xff1a; 在Unity里面没法串流调试眼动追踪功能#xff0c;根本获取不到Device#xff0c;只能将整个场景build成APK#xff0c;安装到头盔里#xff0c;才能在…前言 最近在做一个工作需要用到PICO4 Enterprise VR头盔里的眼动追踪功能但是遇到了如下问题 在Unity里面没法串流调试眼动追踪功能根本获取不到Device只能将整个场景build成APK安装到头盔里才能在代码里调用眼动追踪功能。这使得每次修改代码都要打包一次apk安装到头盔里十分不方便难以调试。PICO VR 官方提供的Eye Tracking教程里获取到的眼睛朝向和位置是相对于Head这个位置的而不是相对于XR Origin下的Camera的位置这使得API不能直接拿来使用。Unity在引入PICO VR眼动跟踪代码后编译时点击build and run后会报错“NullReferenceException: Object reference not set to an instance of an object” 鉴于以上问题网络上均没有人进行解答以及个人没能得到PICO官方的技术支持情况下三周内发了2封技术工单邮件2次催线上客服遂打算自己捣鼓一下写篇教程。 点名批评PICO官方的技术支持不回复邮件的问题明明就几个特别简单的问题但是官方承诺的3-5个工作日内回复并没有做到等了三周一封邮件也没回这个过程还问了客服客服表示会催技术人员回复但等了一周半也没看到放弃了orz 更新补充据说在PICO企业版官网提交企业版工单能得到官方较快的回复。 1. 如何在代码里使用眼动跟踪并转换成世界坐标 或 摄像机坐标系 首先检查眼动追踪是否能正常工作 void Start() {CheckEyeTracking();} private void CheckEyeTracking() {//Start PICO Eye Tracking ServiceTrackingStateCode trackingState;trackingState (TrackingStateCode)PXR_MotionTracking.WantEyeTrackingService();Debug.Log(告知PICO想要眼动跟踪服务 trackingState: trackingState.ToString());//Check Eye Tracking able or notEyeTrackingMode eyeTrackingMode EyeTrackingMode.PXR_ETM_NONE;bool supported false;int supportedModesCount 0;trackingState (TrackingStateCode)PXR_MotionTracking.GetEyeTrackingSupported(ref supported, ref supportedModesCount, ref eyeTrackingMode);Debug.Log(检查是否有眼动跟踪功能 trackingState: trackingState.ToString() code supported);// Get Eye Tracking Statebool tracking true;EyeTrackingState eyeTrackingState new EyeTrackingState();trackingState (TrackingStateCode)PXR_MotionTracking.GetEyeTrackingState(ref tracking, ref eyeTrackingState);Debug.Log(获取当前眼动跟踪状态 trackingState: trackingState.ToString());// Start Eye Tracking//这里要严谨点的话应该要加上if条件判断是否有眼动跟踪功能再选择开启该功能EyeTrackingStartInfo info new EyeTrackingStartInfo();info.needCalibration 1;info.mode eyeTrackingMode;trackingState (TrackingStateCode)PXR_MotionTracking.StartEyeTracking(ref info);Debug.Log(开始眼动跟踪状态 trackingState: trackingState.ToString());//Get Eye Tracking Data//获取眼动跟踪数据EyeTrackingDataGetInfo eyeData new EyeTrackingDataGetInfo();eyeData.displayTime 0;eyeData.flags EyeTrackingDataGetFlags.PXR_EYE_DEFAULT| EyeTrackingDataGetFlags.PXR_EYE_POSITION| EyeTrackingDataGetFlags.PXR_EYE_ORIENTATION;EyeTrackingData eyeTrackingData new EyeTrackingData();trackingState (TrackingStateCode)PXR_MotionTracking.GetEyeTrackingData(ref eyeData, ref eyeTrackingData);Debug.Log(eyeData: eyeData.ToString() TrackingData: eyeTrackingData.ToString());}接下来每帧都获取眼动数据并将眼睛位置和眼睛朝向数据转换成世界坐标 public Transform origin;//在Unity主界面把XR Origin拖进来即可 private Matrix4x4 headPoseMatrix,originPoseMatrix; private Vector3 combineEyeGazeVector, combineEyeGazeOriginOffset, combineEyeGazeOrigin; private Vector3 combineEyeGazeVectorInWorldSpace, combineEyeGazeOriginInWorldSpace; void Update() {GetEyeTrackingData(); }private void GetEyeTrackingData() {//获取head的局部转世界矩阵该矩阵点乘head局部坐标系下坐标则能转换为世界坐标系下的坐标PXR_EyeTracking.GetHeadPosMatrix(out headPoseMatrix); //获取双眼取中间位置位于Head坐标系下的朝向信息GazeVectorPXR_EyeTracking.GetCombineEyeGazeVector(out combineEyeGazeVector);//获取双眼取中间位置位于Head坐标系下的位置信息GazePointPXR_EyeTracking.GetCombineEyeGazePoint(out combineEyeGazeOrigin);//获取眼睛的世界坐标combineEyeGazeOriginInWorldSpace originPoseMatrix.MultiplyPoint(headPoseMatrix.MultiplyPoint(combineEyeGazeOrigin));//获取眼睛的朝向信息combineEyeGazeVectorInWorldSpace originPoseMatrix.MultiplyVector(headPoseMatrix.MultiplyVector(combineEyeGazeVector));//highlighArea是我添加的一个手电筒高亮区域能让用户更直观地查看眼睛看向位置highlighArea.transform.position combineEyeGazeOriginInWorldSpace ;//LookRotation默认是以z轴旋转如果要以y轴旋转的话可以在后面加上 ,Vector3.uphighlighArea.transform.rotation Quaternion.LookRotation(combineEyeGazeVectorInWorldSpace); /* RaycastHit hit;if (Physics.Raycast(highlighArea.transform.position, combineEyeGazeVectorInWorldSpace, out hit, 1000f)){highlighArea.transform.LookAt(hit.point);}*/ } 简易效果图透明圈处是一个作为highlighArea的圆锥区域 至此便已经能获取到PICO VR里眼动追踪的位置和朝向信息。 2. Build and Run报错 引入EyeTracking代码后发现Build and Run时会报以下错误: 这是因为run的话会导致Unity找不到可供眼动追踪的设备导致编译报错。 解决方法只点击Build而不是Build and Run: Build完后打开Pico Developer Center依次点击应用管理-“安装包”-“安装本地应用” 选择build好的apk即可后续便能直接在眼镜里运行 3.眼镜内调试的Trick 对于这种要build到眼镜里才能调试的功能可以利用Unity提高的UI-Text组件进行调试。 即在Unity场景下创建一个UI-Text对象,然后把对象拖到下面脚本的GazeDebugText变量上便能在眼镜里看到相应数据输出了 public TMP_Text GazeDebugText; private void GetEyeTrackingData() {GazeDebugText.text combineEyeGazeOrigin.ToString(F3);//F3是指精确到小数点后3位 }效果 4.如何在Unity里串流调用眼动追踪功能 B站视频使用PICO头显在VR串流环境下进行眼动追踪 我个人是在看了这个视频后才知道PICO VR也能在Unity下串流使用眼动跟踪功能但我没有进一步深入探究据该视频UP主表示PICO neo3 pro eye是可以串流的该方法理应也适用于其他头盔带有企业串流功能的头盔。 在此处也表达下对UP主的感谢在后台私信耐心细致替我解答问题。 想要串流使用pico的眼动追踪功能需要下载特定的串流软件和PICO系统版本。 4.1 串流工具准备 PC端我们要下载最新版本的PICO企业版串流工具普通版的串流工具不知道可不可以: 在PICO端上则是自动保持串流软件更新到最新版本即可。 在PC端下载好“企业串流”软件后点击设置-“通用”: 把需要的功能都勾选上默认是关闭状态 business streaming安装后且打开眼动追踪功能后sdk里会有一个用qt写的测试程序可以试试看串流后眼动跟踪是否正常测试程序不需要用steam但是对头显的固件版本有要求 点击get eye tracking(记住一定要戴上头盔的情况下盲点这个按钮不如眼睛都不在头盔里面自然捕获不到数据)正常的话会显示如下数据 如果这里显示ET Data 是 invalid的那证明你没有戴上头盔后再点击get eye tracking因为头盔没能捕捉到瞳孔数据记住一定要先戴上头盔再盲点击按钮。 4.2 企业串流OpenVRSteamVR进行Unity开发 众所周知任意VR头盔都能用SteamVROpenVR来开发VR应用我们的PICO眼镜也可以这里的“企业串流”只起到了传输EyeTrackingData的作用。我们如果要用到眼动追踪串流调试的话就需要以OpenXRSteamVR的方式进行开发详细教程可以参考知乎-Pico基于Unity XR Interaction Toolkit开发SteamVR串流应用 如果能正常串流到Unity界面则我们进入下一步代码开发。 4.3 代码部分 接下来便是关键的部分我们要在代码里引入企业版的PICO SDK并初始化在你要用到Eye tracking代码最开始的地方引入即可: //引入 企业版串流SDK private const string PXR_PLATFORM_DLL BStreamingSDK.dll; //对 企业版串流SDK 进行初始化 [DllImport(PXR_PLATFORM_DLL, CallingConvention CallingConvention.Cdecl)] private static extern int BStreamingSDK_Init(IntPtr userData); [DllImport(PXR_PLATFORM_DLL, CallingConvention CallingConvention.Cdecl)] public static extern int BStreamingSDK_Deinit();此处的SDK跟我们平常开发PICO用的PXR SDK不一样是为串流功能专门要用的SDK该SDK会随business streaming一起安装不需要你特定指明路径。而且当我们将项目build成apk安装包之后调用的SDK是正常使用的不用担心冲突问题等。 接下来便是获取眼部追踪数据/手势追踪数据即可 //眼动追踪 [DllImport(PXR_PLATFORM_DLL, CallingConvention CallingConvention.Cdecl)] private static extern int BStreamingSDK_GetEyeTrackingData(ref PxrEyeTrackingData etdata);//手势追踪 [DllImport(PXR_PLATFORM_DLL, CallingConvention CallingConvention.Cdecl)] private static extern int BStreamingSDK_GetHandTrackerAimState(HandType hand, ref HandAimState aimState); [DllImport(PXR_PLATFORM_DLL, CallingConvention CallingConvention.Cdecl)] private static extern int BStreamingSDK_GetHandTrackerJointLocations(HandType hand, ref HandJointLocations jointLocations);此外注意这里的PxrEyeTrackingData并不是SDK自带的类而是需要我们自己在代码里创建的类然后将其传入官方提供的函数来获取数据(手势追踪的Hand AimState等也是如此要自己创建类详细部分可以向官方发送企业工单获取技术人员帮助),该类的定义如下所示 public struct PxrEyeTrackingData {public int leftEyePoseStatus;public int rightEyePoseStatus;public int combinedEyePoseStatus;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)] public float[] leftEyeGazePoint;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)] public float[] rightEyeGazePoint;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] combinedEyeGazePoint;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] leftEyeGazeVector;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] rightEyeGazeVector;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] combinedEyeGazeVector;public float leftEyeOpenness;public float rightEyeOpenness;public float leftEyePupilDilation;public float rightEyePupilDilation;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] leftEyePositionGuide;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] rightEvePositionGuide;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3)]public float[] foveatedGazeDirection;public int foveatedGazeTrackingState; }后续要注意到的点是串流SDK里 CombinedEyeGazeVector Z轴是要取反的与PICO Integration SDK不同: PxrEyeTrackingData etData new PxrEyeTrackingData(); var result BStreamingSDK_GetEyeTrackingData(ref etData); headPoseMatrix Matrix4x4.TRS(userView.transform.position, userView.transform.rotation, Vector3.one); var eyePoseStatus etData.combinedEyePoseStatus; var gazePosition new Vector3(etData.combinedEyeGazePoint[0], etData.combinedEyeGazePoint[1], etData.combinedEyeGazePoint[2]); var gazeVector new Vector3(etData.combinedEyeGazeVector[0], etData.combinedEyeGazeVector[1], -etData.combinedEyeGazeVector[2]); combineEyeGazeOrigin gazePosition; combineEyeGazeVector gazeVector;combineEyeGazeOriginInWorldSpace headPoseMatrix.MultiplyPoint(combineEyeGazeOrigin); combineEyeGazeVectorInWorldSpace headPoseMatrix.MultiplyVector(combineEyeGazeVector); highlightArea.position combineEyeGazeOriginInWorldSpace; highlightArea.rotation Quaternion.LookRotation(combineEyeGazeVectorInWorldSpace);如果经过测试后eye tracking data什么的没有问题后续在Unity串流过程中使用Eye Tracking Dat并基于OpenXR进行应用调试与开发。
http://www.tj-hxxt.cn/news/232777.html

相关文章:

  • 免费静态网站托管光明附近网站建设公司
  • 服装企业 北京 网站建设济南互联网网站建设价格
  • 平台营销方式有哪些湖南网站营销优化开发
  • 济南微网站建设广州网站建设公司招聘
  • 秦皇岛建设厅网站江西省建设厅业绩网站
  • 做环卫设备都有哪些网站做网站怎么对接国际收款商户
  • 什么渠道做网站建设襄阳哪里做网站
  • 网站 用php asp源码 比较好弄一个小程序要多少钱
  • 180天做180个网站网站建设与推广完美结合
  • 努力把网站建设成为怎样做软件app软件
  • 庄河城乡建设管理局网站如何建设cpa影视网站
  • wordpress影视站网络投放广告有哪些平台
  • 如何制作自己的网站 可放广告离线 wordpress
  • o2o手机网站建设难心理学网站开发
  • 外贸一站式推广服务专门做照片的网站
  • 快速建网站的软件宝安网站建设 名匠
  • 网站域名在哪里注册新手学建设网站书籍
  • 网站开发的关键计算机资源计划seo优化网
  • 一个企业网站如何能放到互联网上 vps企业网站推广成功案例
  • 曲靖 曲靖网站建设软件(app)开发做网站在哪个程序做
  • 乐山网站建设如何做网站关键词霸屏
  • 网络科技有限公司网站90后小姑娘做网站
  • 免费网站优化Sensei wordpress插件
  • 做网站都需要哪些软件济南会做网站的公司
  • 企业网站管理系统下载萝岗电子商务网站建设
  • 把网站做到wordpress里面去excel做的最好的网站
  • 网站建设前期费用管理类网站开发价格
  • 小学网站怎么做数字化管理咨询
  • 银川网站建设网站怎么做图片轮播
  • 网站服务器一年的费用logo设计的最好的公司