- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
daydream Controller 很棒,我们希望能够在我的 AR 应用中使用它。它通过蓝牙与 HoloLens 配对就好了,但不确定我是否可以在 Unity 中查看它。
HoloLens 和 daydream 都需要自己的 Unity 技术预览。 gvr Controller code在线,但似乎直接与 GVR C api 对话。
关于是否可以在 daydream 技术预览之外访问 Unity 中的 daydream Controller 有任何想法吗?
最佳答案
在没有 GVR 服务的情况下访问 daydream Controller 是非常可能的。事实上,我自己也在做这方面的工作,可以分享我所知道的。
获取数据
使用蓝牙 gatt,您可以查看所有可用数据并订阅您想要的 ID。我不知道您将如何在 Hololens/Unity 中具体执行此操作。基本上你想:
0000fe55-0000-1000-8000-00805f9b34fb
) 00000001-1000-1000-8000-00805f9b34fb
) 00002902-0000-1000-8000-00805f9b34fb
) static final UUID DAYDREAM_CUSTOM_SERVICE = UUID.fromString("0000fe55-0000-1000-8000-00805f9b34fb");
static final UUID DAYDREAM_CHARACTERISTIC = UUID.fromString("00000001-1000-1000-8000-00805f9b34fb");
static final UUID CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
...
BluetoothGattService service = gatt.getService(DAYDREAM_CUSTOM_SERVICE);
BluetoothGattCharacteristic characteristic = service.getCharacteristic(DAYDREAM_CHARACTERISTIC);
gatt.setCharacteristicNotification(characteristic, true);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID);
descriptor.setValue( BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
gatt.writeDescriptor(descriptor);
5BEBFFB825FDB000041000B00000000000000000
63EFFFB825FDB000041000B00000000000000008
6C73FFB825FDB000041000B00000000000000038
480BFE87EB00E801841000B00000000191FBA008
4F8FFE47EB00E800441000B0000003FEB1FBA038
5893FE27EB00EFFF041000B0000003FF51FBA000
Bytes:
- 1: TTTT TTTT * T for time, loops
- 2: TNNN NNKK * N is sequence number
- 3: KKKK KKKK * IJK is orientation
- 4: KKKI IIII
- 5: IIII IIII
- 6: JJJJ JJJJ
- 7: JJJJ JOOO * MNO is acceleration
- 8: OOOO OOOO
- 9: OONN NNNN
-10: NNNN NNNM
-11: MMMM MMMM
-12: MMMM CCCC * CDE for raw gyro
-13: CCCC CCCC
-14: CDDD DDDD
-15: DDDD DDEE
-16: EEEE EEEE
-17: EEEX XXXX * All the X is the X touch position (8 bits)
-18: XXXY YYYY * Y the Y touch position (8 bits)
-19: YYYB BBBB * B the buttons (5 bits | [+][-][App][Home][Click])
-20: Values vary
static final int CLICK_BTN = 0x1;
static final int HOME_BTN = 0x2;
static final int APP_BTN = 0x4;
static final int VOL_DOWN_BTN = 0x8;
static final int VOL_UP_BTN = 0x10;
float xTouch=0, yTouch=0;
...
final boolean isClickDown = (data[18] & CLICK_BTN) > 0;
final boolean isHomeDown = (data[18] & HOME_BTN) > 0;
final boolean isAppDown = (data[18] & APP_BTN) > 0;
final boolean isVolMinusDown = (data[18] & VOL_DOWN_BTN) > 0;
final boolean isVolPlusDown = (data[18] & VOL_UP_BTN) > 0;
final int time = ((data[0] & 0xFF) << 1 | (data[1] & 0x80) >> 7 );
final int seq = (data[1] & 0x7C) >> 2;
int xOri = (data[1] & 0x03) << 11 | (data[2] & 0xFF) << 3 | (data[3] & 0xE0) >> 5;
xOri = (xOri << 19) >> 19;
int yOri = (data[3] & 0x1F) << 8 | (data[4] & 0xFF);
yOri = (yOri << 19) >> 19;
int zOri = (data[5] & 0xFF) << 5 | (data[6] & 0xF8) >> 3;
zOri = (zOri << 19) >> 19;
int xAcc = (data[6] & 0x07) << 10 | (data[7] & 0xFF) << 2 | (data[8] & 0xC0) >> 6;
xAcc = (xAcc << 19) >> 19;
int yAcc = (data[8] & 0x3F) << 7 | (data[9] & 0xFE) >>> 1;
yAcc = (yAcc << 19) >> 19;
int zAcc = (data[9] & 0x01) << 12 | (data[10] & 0xFF) << 4 | (data[11] & 0xF0) >> 4;
zAcc = (zAcc << 19) >> 19;
int xGyro = ((data[11] & 0x0F) << 9 | (data[12] & 0xFF) << 1 | (data[13] & 0x80) >> 7);
xGyro = (xGyro << 19) >> 19;
int yGyro = ((data[13] & 0x7F) << 6 | (data[14] & 0xFC) >> 2 );
yGyro = (yGyro << 19) >> 19;
int zGyro = ((data[14] & 0x03) << 11 | (data[15] & 0xFF) << 3 | (data[16] & 0xE0) >> 5);
zGyro = (zGyro << 19) >> 19;
xTouch = ((data[16] & 0x1F) << 3 | (data[17] & 0xE0) >> 5) / 255.0f;
yTouch = ((data[17] & 0x1F) << 3 | (data[18] & 0xE0) >> 5) / 255.0f;
value = (value << 19) >> 19
也可以
value = (value >> 12) == 0 ? value : ~0x1FFF | value
.它只是将有符号位扩展为 32 位有符号整数。
Vector3 oriVector = new Vector3 (-xOri, -yOri, zOri);
...
oriVector *= (2 * Mathf.PI / 4095.0);
accVector *= (8 * 9.8 / 4095.0);
gyroVector *= (2048 / 180 * Mathf.PI / 4095.0);
public Quaternion orientation = Quaternion.identity;
private Quaternion controllerPoseInSensorSpace = Quaternion.identity;
private Quaternion startFromSensorTransformation = Quaternion.identity;
...
// do this bit after getting the data and scaling it
float sqrMagnitude = oriVector.sqrMagnitude;
if (sqrMagnitude > 0) {
// extract radian angle
float w = Mathf.Sqrt (sqrMagnitude);
// normalize vector
oriVector /= w;
// set orientation space
setOrientationInSensorSpace (w,oriVector);
}
...
// then assign to a Transform
controller.localRotation = this.orientation;
...
// sets orientation with rotation offset
void setOrientationInSensorSpace(float angle, Vector3 axis) {
// set orientation space
this.controllerPoseInSensorSpace = Quaternion.AngleAxis(angle*Mathf.Rad2Deg,axis);
// rotate based on centered offset
this.orientation = this.startFromSensorTransformation * this.controllerPoseInSensorSpace;
}
...
// after holding home for 600 milliseconds
private void setStartFromSensorTransformation() {
Vector3 angles = this.controllerPoseInSensorSpace.eulerAngles;
// reset rotation on Y
this.startFromSensorTransformation.Set(0,Mathf.Sin(-angles.y * Mathf.Deg2Rad / 2f), 0, Mathf.Cos(angles.y * Mathf.Deg2Rad / 2f));
// could also reset all, easier to work with
//this.startFromSensorTransformation = Quaternion.Inverse (this.controllerPoseInSensorSpace);
}
1.0.10 (out of the box): 0xF0/0xF8
1.0.10 (previously used with gvr): 0x00/0x08/0x38/0x51
1.0.15: 0x00/0x70
关于unity3d - 在 HoloLens 上还是在 Daydream 之外使用 Daydream Controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730809/
混合现实应用很快可以在三种设备上运行:HoloLens 1、Hololens 2 和沉浸式 (VR) 耳机。某些行为可能会有所不同,具体取决于您运行该应用程序的设备类型。我如何向 SDK 询问我的应用
今天早上,我正在研究 Mixed Reality 250 tutorial .我坚持让一个 HoloLens 加入另一个 HoloLens 当前正在托管的 session ,因为 UIContaine
我可以在 Microsoft 的 Hololens 中创建新手势吗?如果是这样,怎么办?我想进一步操纵他们的全息图并使用我自己的手势。 最佳答案 不,目前无法“创建”其他手势。 关于hololens
Microsoft Hololens 附带一个名为 Holograms 的红色应用磁贴。如果你选择它,你会得到一份全息装饰品目录,你可以将它们散布在空间中。 我想创建自己的动画全息图并将其添加到该目录
有没有办法从 Hololens 2 导出整个扫描环境?使用设备门户,我可以将最近的 128 个块导出为 .obj,或者我假设是 .mapx 格式的整个数据集。我想导出超过 128 个块,分段导出但具有
有人知道如何在 Urho 中使用空间 anchor 吗?我查看了所有样本,没有发现任何东西。文档中也没有任何内容。我尝试使用常规的全息 API: var store = await Spati
有谁知道如何在 Unity 应用程序中从 Hololens 深度相机访问原始深度图像?我知道我必须在 Hololens 上启用“研究模式”。我在 https://github.com/Microsof
我有一个 HoloLens,我想将我的 WIFI 网络添加到其中。但出于某些安全原因,我们需要为 HoloLens 提供自定义的唯一 IP 地址。我不知道该怎么做。谁能帮帮我吗? 我已尝试“Windo
有没有办法通过有线连接在 Microsoft Hololens 和桌面上的单独程序之间传输数据?如果有,如何实现?我的最终目标是将实时镜头传输到 HoloLens 上,但它不能是无线的。 最佳答案 您
经过几个星期的挫折,我终于能够将字符串从 Python 客户端发送到 Hololens 服务器。代码在下面并且运行完美。但是,我想知道是否有人对套接字有经验可以帮助我修改此代码以将 openCV 网络
我目前遇到一个问题,当我的手向前/向后时,我想将游戏对象移近/远离我(HoloLens 相机)。好吧,我已经正确地实现了将对象移近/移远的逻辑,但无法通过确定手的运动来解决问题。我正在使用 HoloT
我创建了一个简单的 Unity WebGL 应用程序,我使用 Microsoft Hololens 对房间模型进行了可视化扫描。 看起来像这样: 现在我想在我的 WebGL 应用程序的房间中的特定位置
有没有办法获取HoloLens用户的位置?我想将用户的位置发送回电脑,然后相应地更新我的全息图。有办法这样做吗?我无法找到任何可以将用户位置发送回我的计算机的 API。 我们可以使用用户的初始位置和方
当您在 Visual Studio 中使用“全息 DirectX 11 应用程序”模板时,它会创建一个占据整个 HoloLens View 的应用程序(我相信它称为全息 View )。 如何构建像全息
我想在 HoloLens 1 中放置远距离(20 米以上)的虚拟对象(全息图)。但是,在这样的距离处,全息图变得不稳定并且在显示器中似乎“游动”。有没有人在这方面取得成功?什么对你有用? 一些潜在的修
从 VS 构建到设备工作正常。但是使用主设置进行构建然后就行不通了。由于商店提交需要master,因此从商店下载就会出现问题。 我一直在尝试跟踪这个问题,但基本上输入不起作用。如果我执行点击,我会得到
因此,我正在努力思考从通过 MediaFrameReference 类获取的帧进行的转换。我得到的是一张带有相关空间坐标系和相机内在参数的图像。为了计算图像 (U, V) 中像素的真实世界坐标 (X,
我一直在阅读相关的 holotoolkit 空间理解代码,但找不到与获取已找到表的维度相关的任何内容。我关注了this great tutorial将 table 添加为自定义形状。但后来陷入困境。我
我正在编写教程 MR 基础知识 101:https://docs.microsoft.com/en-us/windows/mixed-reality/holograms-101 并按照本文中的建议进行
我正在统一制作一个Hololens应用程序,该应用程序可以启动udp服务器。这个等待来自外部udp客户端的消息。这是服务器端: using UnityEngine; using System; usi
我是一名优秀的程序员,十分优秀!