- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我正在尝试编写一个脚本,为只有一个功能 ARM 的用户将一个 Controller 的 Action 映射到另一个 Controller 上。我如何将一个 Controller 的位置镜像到另一个 Controller ,使 ARM 在双边运动中?
镜像 y 轴和 z 轴很容易,因为它们一起移动并且旋转很容易镜像。我无法镜像 x 轴运动。我想要这样,如果一只手移出,另一只手也移出,并且它们一起移入。有什么想法我可以做到这一点吗?我附上了我目前的剧本。 我还在 OVRCemeraRig 脚本中使用简单的 bool 逻辑禁用了非镜像 Controller 的位置跟踪,以防止运动中的卡顿 需要使用 OVRCemeraRig,因为使用了最终 IK
我试过在工作臂的 x 位置上取一个差异,然后将该值添加到非工作臂。那没有用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VRMirror : MonoBehaviour
{
public bool mirrorLeft;
public bool mirrorRight;
public GameObject leftHand; //left hand anchor in OVRCameraRig
public GameObject rightHand; //right hand anchor from OVRCameraRig
void Start()
{
}
void FixedUpdate()
{
Transform left = leftHand.GetComponent<Transform>();
Transform right = rightHand.GetComponent<Transform>();
if (mirrorLeft)
{
Vector3 leftPos = left.position;
Quaternion leftRot = left.rotation;
leftRot.y = -leftRot.y;
right.position = leftPos;
right.rotation = leftRot;
}
else if (mirrorRight)
{
Vector3 rightPos = right.position;
Quaternion rightRot = right.rotation;
rightRot.y = -rightRot.y;
left.position = rightPos;
left.rotation = rightRot;
}
}
}
最佳答案
为了稳健性,我们假设玩家的 body 旋转不一定总是正确指向 (1,0,0) 世界方向。相反,我们可以获得对玩家转换 playerTransform
的引用(如果必须,请务必使用检查器或在 Start
中分配它)并使用它进行计算.
要计算相对向量的双边对称位置,您可以计算 relativeVec - 2f * playerTransform.right * Vector3.Dot(relativeVec, playerTransform.right);
。评论中解释了为什么这样做。
对于位置,我们可以将源手的绝对位置转换为相对于玩家位置的位置,然后找到目标手的相对位置,然后将其转换回绝对位置。
对于旋转,确定源手的向上和向前并反射(reflect)它们以确定目标手的向上和向前。使用 Quaternion.SetLookRotation
将矢量转换为目标手的旋转。
我们可以对相对位置和我们的方向向量使用相同的代码,所以一旦你掌握了数学,它实际上不需要太多代码。而且,由于 Transform
是一个类,我们可以创建一个执行反射过程的方法,然后将其传递给我们希望成为源和目标的转换:
public class VRMirror : MonoBehaviour
{
public bool mirrorLeft;
public bool mirrorRight;
public GameObject leftHand; //left hand anchor in OVRCameraRig
public GameObject rightHand; //right hand anchor from OVRCameraRig
public Transform playerTransform;
void Start()
{
}
void FixedUpdate()
{
Transform left = leftHand.GetComponent<Transform>();
Transform right = rightHand.GetComponent<Transform>();
if (mirrorLeft)
{
MirrorFromTo(left, right);
}
else if (mirrorRight)
{
MirrorFromTo(right, left);
}
}
void MirrorFromTo(Transform sourceTransform, Transform destTransform)
{
// Determine dest position
Vector3 playerToSourceHand = sourceTransform.position - playerTransform.position;
Vector3 playerToDestHand = ReflectRelativeVector(playerToSourceHand);
destTransform.position = playerTransform.position + playerToDestHand ;
// Determine dest rotation
Vector3 forwardVec = ReflectRelativeVector(sourceTransform.forward);
Vector3 upVec = ReflectRelativeVector(sourceTransform.up);
destTransform.rotation = Quaternion.LookRotation(forwardVec,upVec);
}
Vector3 ReflectRelativeVector(Vector3 relativeVec)
{
// relativeVec
// Take the relative vector....
// + Vector3.Dot(relativeVec, playerTransform.right)
// and for how far along the player's right direction it is
// away from the player (may be negative),
// * playerTransform.right
// move it that distance along the player's right...
// * -2f
// negative two times (i.e., along the left direction 2x)
return relativeVec
+ Vector3.Dot(relativeVec, playerTransform.right)
* playerTransform.right
* -2f;
}
}
关于c# - 为双边移动统一镜像 Oculus Rift Controller 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57013289/
我写了这个简单的代码: public class Test { public static void main(String args[]) { OculusRift ocul
我正在开发一个项目,该项目将一些渲染卸载到我为 Unity 编写的 native 插件,以便利用实例化和其他高级图形功能。我正在为跨平台版本开发它,但我使用的是 Mac,因此测试主要使用 OpenGL
我们正在进行一项实验,在该实验中,HMD的用户必须体验多种旋转增益。我的意思是,我们希望将用户头部的相对旋转更改为虚拟世界中的旋转增益。 例如,旋转增益为2表示当我在现实生活中将头的偏航度更改为45度
我正在使用 oculus 编写应用程序,但相机设置有问题。只是有时一切正常,相机开始晃动,我们正在看的模型似乎在抖动。到目前为止有人遇到同样的问题吗? 更新相机矩阵的代码如下: // Concaten
我有一台配备眼动仪的 Oculus Rift,用于根据眼动仪输入显示实时图像。我想听听您对我处理 Rift 显示的方式的意见(对吗?)。 我有一个简单文本的基本图像,它是根据眼动仪的注视坐标使用 Op
我正在尝试修改 Oculus World Demo 以显示来自相机的视频流而不是预设图形,但是,我发现很难找到渲染 cv::IplImage 或 cv 的正确方法::mat 图像类型到 Oculus
我想在 javascript 中为 oculus rift 实现桶形着色器。 根据此视频 (http://youtu.be/B7qrgrrHry0?t=11m26s),桶形畸变的半径函数为: newr
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我从 Oculus Rift 网站下载了 SDK,我正在尝试运行项目在示例文件夹中。当我构建项目时,出现错误 fatal error C1083: Cannot open open include f
我一直有兴趣为 Blender(一种动画软件)创建一个附加组件,允许使用 Oculus Rift 制作动画。 Oculus Rift SDK 使用 C 语言运行,但 Blender 使用 Python
目前,我正在尝试编写一个脚本,为只有一个功能 ARM 的用户将一个 Controller 的 Action 映射到另一个 Controller 上。我如何将一个 Controller 的位置镜像到另一
在我的 animate() 函数中,我有以下代码: if (this.controls.forward) { // move in direction we look at var
我正在编写一个支持 Oculus Rfit 的小项目,我使用点 Sprite 来渲染我的粒子。我根据点 Sprite 与顶点着色器中“相机”的距离计算点 Sprite 的大小(以像素为单位)。在默认屏
我想为 Oculus Rift 编写代码并从我的程序中完全访问 Facebook API。对我来说,这有点跳入深渊,但这并不重要。我有一定的编程知识,该学什么就学什么。 现在对于上述组合,我在想: C
好的,我正在尝试做这里写的事情 https://developer.oculus.com/documentation/pcsdk/latest/concepts/dg-sensor/ 但我对#incl
我正在尝试设置我的第一个 C/C++使用 Oculus SDK for Windows (8.0.0) 的 Oculus Rift 项目在OpenGL上下文,但我无法使其正常运行。 每当我尝试编译所提
我有 Oculus Rift VR,我从他们的网站下载了 SDK。我正在使用 Visual Studio 2010 Pro,我做了他们在 WIKI 页面中提到的所有事情最小的 Oculus 应用程序教
我不想在跟踪传感器移动 22.5 度时关闭“重置位置”。 我们是一家制造在场景中行走的设备的公司。有时我们想围绕玩家旋转“跟踪传感器”。现在每次我们这样做时,“跟踪传感器”设备都会重置 hmd。这会导
我希望能够在 Unity 5 中看到双眼的输出。使用最新的 OVR 插件,unity 只显示单眼。此外,它似乎甚至在耳机上也呈现单视场效果。 我想要一个例子,它可以让我在左眼上显示蓝色矩形,在右眼
有了 Unity 5.1 和 Oculus SDK 0.6 以及新的内置 Virtual Reality Supported 复选框,我似乎无法改变相机在 VR 中的位置。 当然我可以更改相机的 Tr
我是一名优秀的程序员,十分优秀!