Unity zSpace 开发

文章目录

  • 1.下载 zSpace 开发环境
    • 1.1 zCore Unity Package
    • 1.2 zView Unity Package
  • 2. 导入工程
  • 3. 发布设置
  • 4.功能实现
    • 4.1 用触控笔来实现对模型的拖拽:
  • 5. 后续更新

1.下载 zSpace 开发环境

官网地址
在这里插入图片描述

1.1 zCore Unity Package

  • zSpace 开发核心
  • 必须

1.2 zView Unity Package

  • 主要用途:在zSpace设备外接显示屏或投影时,将zSpace设备的3D画面转为2D画面进行展示(zSpace显示3D,外接设备显示2D)
  • 按需下载在这里插入图片描述

2. 导入工程

将下载好的 zCore Unity Package 导入到 Unity
在这里插入图片描述

3. 发布设置

  1. Edit—ProjectSettings—Player—OtherSetting—Rendering—ColorSpace 改为 Gamma
  2. Edit—ProjectSettings—Player—OtherSetting—AutoGraphicsAPIforWindows 取消勾选
  3. Edit—ProjectSettings—Player—OtherSetting—GraphicsAPIsforWindows-添加OpenGLCore,其他全部删除
    在这里插入图片描述
  4. Edit—ProjectSettings—Player—XRSetting 中勾选 Virtual Reality Supported
  5. Edit—ProjectSettings—Player—XRSetting—Virtual Reality SDKs 删除其他项添加 Stereo Display (non head-mounted)
    在这里插入图片描述

4.功能实现

4.1 用触控笔来实现对模型的拖拽:


//
//  Copyright (C) 2007-2020 zSpace, Inc.  All Rights Reserved.
//
using UnityEngine;
using UnityEngine.EventSystems;using zSpace.Core.EventSystems;
using zSpace.Core.Input;namespace zSpace.Core.Samples
{public class Draggable :ZPointerInteractable, IBeginDragHandler, IDragHandler, IEndDragHandler{// Public Methodspublic override ZPointer.DragPolicy GetDragPolicy(ZPointer pointer){if (pointer is ZMouse){return ZPointer.DragPolicy.LockToScreenAlignedPlane;}if (pointer is ZStylus){return ZPointer.DragPolicy.LockHitPosition;}return base.GetDragPolicy(pointer);}public void OnBeginDrag(PointerEventData eventData){ZPointerEventData pointerEventData = eventData as ZPointerEventData;if (pointerEventData == null ||pointerEventData.button != PointerEventData.InputButton.Left){return;}Pose pose = pointerEventData.Pointer.EndPointWorldPose;// Cache the initial grab state.this._initialGrabOffset =Quaternion.Inverse(this.transform.rotation) *(this.transform.position - pose.position);this._initialGrabRotation =Quaternion.Inverse(pose.rotation) *this.transform.rotation;// If the grabbable object has a rigidbody component,// mark it as kinematic during the grab.var rigidbody = this.GetComponent<Rigidbody>();if (rigidbody != null){this._isKinematic = rigidbody.isKinematic;rigidbody.isKinematic = true;}// Capture pointer events.pointerEventData.Pointer.CapturePointer(this.gameObject);}public void OnDrag(PointerEventData eventData){ZPointerEventData pointerEventData = eventData as ZPointerEventData;if (pointerEventData == null ||pointerEventData.button != PointerEventData.InputButton.Left){return;}Pose pose = pointerEventData.Pointer.EndPointWorldPose;// Update the grab object's rotation.this.transform.rotation =pose.rotation * this._initialGrabRotation;// Update the grab object's position.this.transform.position =pose.position + (this.transform.rotation * this._initialGrabOffset);}public void OnEndDrag(PointerEventData eventData){ZPointerEventData pointerEventData = eventData as ZPointerEventData;if (pointerEventData == null ||pointerEventData.button != PointerEventData.InputButton.Left){return;}// Release the pointer.pointerEventData.Pointer.CapturePointer(null);// If the grabbable object has a rigidbody component,// restore its original isKinematic state.var rigidbody = this.GetComponent<Rigidbody>();if (rigidbody != null){rigidbody.isKinematic = this._isKinematic;}}// Private Membersprivate Vector3 _initialGrabOffset = Vector3.zero;private Quaternion _initialGrabRotation = Quaternion.identity;private bool _isKinematic = false;}
}

5. 后续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis EntityWrapper DISTINCTQU用法

使用EntityWrapper进行DISTINCT查询可以通过以下几个步骤实现&#xff1a; 创建一个EntityWrapper对象&#xff1a;EntityWrapper<T> wrapper new EntityWrapper<>();使用setSqlSelect方法设置需要查询的字段&#xff0c;并在字段前加上DISTINCT关键字&#xff0…

机器人CPP编程基础-05完结The End

非常不可思议……之前四篇博文竟然有超过100的阅读量…… 此文此部分终结&#xff0c;没有继续写下去的必要了。 插入一个分享&#xff1a; 编程基础不重要了&#xff0c;只要明确需求&#xff0c;借助AI工具就能完成一个项目。 当然也不是一次成功&#xff0c;工具使用也需要…

ORA-01539: 表空间 ‘GSC004‘ 未联机

1.检查表空间状态&#xff1a; SELECT tablespace_name, status FROM dba_tablespaces WHERE tablespace_name GSC004;2.联机表空间&#xff1a;如果表空间处于离线状态&#xff0c;可以尝试将其联机。 ALTER TABLESPACE GSC004 ONLINE;3.检查表空间文件&#xff0c;确保表空…

代码随想录第48天 | 198. 打家劫舍、213. 打家劫舍II、337. 打家劫舍III

198. 打家劫舍 当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 递归五部曲&#xff1a; dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i]。决定dp[i]的因素就是第i房间偷还是不偷。 如果偷第i房间&…

计算机视觉一 —— 介绍与环境安装

傲不可长 欲不可纵 乐不可极 志不可满 一、介绍 研究理论和应用 - 研究如何使机器“看”的科学 - 让计算机具有人类视觉的所有功能 - 让计算机从图像中&#xff0c;提取有用的信息&#xff0c;并解释 - 重构人眼&#xff1b;重构视觉皮层&#xff1b;重构大脑剩余部分 计…

利用ChatGPT绘制思维导图——以新能源汽车竞品分析报告为例

随着人们对环境保护的日益关注和传统燃油汽车的限制&#xff0c;全球范围内对新能源汽车的需求不断增长。新能源汽车市场的激烈竞争使得了解各个竞品的特点和优劣成为关键。然而&#xff0c;针对这一领域的详尽竞品分析却常常需要大量时间和精力。 在此背景下&#xff0c;人工智…

nestjs:nginx反向代理服务器后如何获取请求的ip地址

问题&#xff1a; 如题 参考&#xff1a; nodejsnginx获取真实ip-腾讯云开发者社区-腾讯云 「转」从限流谈到伪造 IP nginx remote_addr 解决办法&#xff1a; 1.设置nginx 对于代理部分&#xff0c;对http header添加Host、X-Real-IP、X-Forwarded-For&#xff08;最重要&…

【SA8295P 源码分析】69 - Android 侧添加支持 busybox telnetd 服务

【SA8295P 源码分析】69 - Android 侧添加支持 busybox telnetd 服务 一、下载 busybox-1.36.1.tar.bz2 源码包二、编译 busybox 源码三、将编译后的 busybox 打包编入Android 镜像中系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》 本文链接:《【SA8295P 源码…

Qt+C++自定义控件仪表盘动画仿真

程序示例精选 QtC自定义控件仪表盘动画仿真 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC自定义控件仪表盘动画仿真>>编写代码&#xff0c;代码整洁&#xff0c;规则&…

2023国赛数学建模D题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

P8605 [蓝桥杯 2013 国 AC] 网络寻路

X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包&#xff0c;为了安全起见&#xff0c;必须恰好被转发两次到达目的地。该包可能在任意一个节点产生&#xff0c;我们需要知道该网络中一共有多少种不同的转发路径。 源地址和目标地址可以相同…

PHP原生类

什么是php原生类 原生类就是php内置类&#xff0c;不用定义php自带的类&#xff0c;即不需要在当前脚本写出&#xff0c;但也可以实例化的类 我们可以通过脚本找一下php原生类 <?php $classes get_declared_classes(); foreach ($classes as $class) {$methods get_clas…

网页touch-action禁用手势

问题 在iphone的safari 下滑网页时&#xff0c;无法下滑 原因&#xff1a; 设置了touch-action: none html ,body {touch-action: none;}此行代码为禁用手势&#xff0c;但是在pc上Chrome浏览器模拟手机时&#xff0c;并不能生效(禁止手势)。 但是此行代码在iphone手机浏览器…

【Go 基础篇】Go语言字符类型:解析字符的本质与应用

介绍 字符类型是计算机编程中用于表示文本和字符的数据类型&#xff0c;是构建字符串的基本单位。在Go语言&#xff08;Golang&#xff09;中&#xff0c;字符类型具有独特的特点和表示方式&#xff0c;包括Unicode编码、字符字面值以及字符操作。本篇博客将深入探讨Go语言中的…

首次使用ninja的体验

首先总结说自己的理解&#xff0c;就是NINJA是一个和MAKE同一级别的编译工具&#xff0c;在CMAKE/GRADLE等工具之下工作 cmake目前可以生成makefile&#xff0c;也可以生成ninja文件(CMAKE选项中增加了-G Ninja&#xff09; 使用ninja all编译生成的ninja文件 1.工具准备&…

Element组件浅尝辄止5:Empty 空状态组件

Empty空状态组件&#xff1a;空状态时的占位提示。 如第一次进入当前功能模块时&#xff0c;数据状态为空&#xff0c;则展示空状态&#xff0c;可用到Empty组件 1.How? <el-empty description"描述文字"></el-empty> 2.自定义图片 通过设置 image 属…

plsql开发中动态sql的使用教程(不使用dbms_sql包)

一般的PL/SQL程序设计中&#xff0c;在DML和事务控制的语句中可以直接使用SQL&#xff0c;但是对于新建存储过程&#xff0c;其中涉及传参要被应用为列名时&#xff0c;不能在PL/SQL中直接使用&#xff0c;一会儿下面举例介绍&#xff0c;那么要想实现设计的功能&#xff0c;可…

PyTorch Lightning教程七:可视化

本节指导如何利用Lightning进行可视化和监控模型 为何需要跟踪参数 在模型开发中&#xff0c;我们跟踪感兴趣的值&#xff0c;例如validation_loss&#xff0c;以可视化模型的学习过程。模型开发就像驾驶一辆没有窗户的汽车&#xff0c;图表和日志提供了窗口&#xff0c;让我们…

Docker的基本概念及镜像加速器的配置

1.Docker的概念 由于代码运行环境不同&#xff0c;代码运行会出现水土不服的情况。运用docker容器会把环境进行打包&#xff0c;避免水土不服。docker是一种容器技术&#xff0c;它解决软件跨环境迁移的问题。 2&#xff0c;安装Docker 3.Docker架构 4.Docker镜像加速器的配…

我们常说这个pycharm里有陷阱,第三方库导入失败,看这里!

最近有小伙伴遇到了明明安装了 python 第三方库&#xff0c;但是在 pycharm 当中却导入不成功的问题。 ​ 一直以来&#xff0c;也有不少初学 python 的小伙伴&#xff0c;一不小心就跳进了虚拟环境和系统环境的【陷阱】中。 本文就基于此问题&#xff0c;来说说在 pycharm 当…