quaternions相关内容
昨天我问: 基本上,我发现因为“云台锁定”,如果你俯仰+偏航你将不可避免地产生滚动效应。有关详细信息,您可以阅读此问题。 我试图阻止这种情况发生。当你在一个正常的FPS射手环顾四周,你没有你的相机滚动的地方! 这是我当前的被动鼠标功能: int windowWidth = 640; int windowHeight = 480; int oldMouseX =
..
我要对第一人称相机进行编码,其旋转存储在四元数中。不幸的是旋转有问题。 以下功能负责旋转相机。参数 Mouse 和 Speed 传递鼠标移动和旋转速度。然后函数获取旋转四元数,旋转它并存储结果。顺便说一句,我使用的是 Bullet Physics ,类型和功能来自于它。 void Rotate(vec2 Mouse,float Speed) { btTransform tran
..
p1和p2,p2连接到p1,不仅连接到p1的位置,而且连接到它的旋转,因此q1是代表p1旋转的四元数。 如果q1旋转,则p1的位置也必须围绕p1旋转。 我只需要计算p2的位置,而不是旋转,我已经完成了旋转。 所以基本上是一个飞船停靠到一个车站,我需要移动和旋转站与周围的船停靠到它。 我如何做? 我写的代码工作,只要车站在对接期间不旋转: bool docked [100]
..
从我的上一个问题继续,我现在设法旋转我的对象与四元数,但仍有一个小问题,我不知道如何解决它。使用下面的代码我的对象旋转x和y轴。但是当我在x和y键之间切换时,它总是跳回到初始位置。所以我永远不会从新的位置轮换,但总是从程序开始的一个。 四元数q1 =四元数 - > quat_rotate(anglex,1,0,0); 四元数q2 =四元数 - > quat_rotate(angley,0,
..
我使用当前方向(四元数)及其当前位置为相机创建视图矩阵。 void Camera :: updateViewMatrix() { view = glm :: gtx :: quaternion :: toMat4(orientation); //包含旋转(Free Look Camera) view [3] [0] = -glm :: dot(glm :: vec3(view
..
我有两个对象,每个对象有两个向量: 正常向量 喜欢这张图片: 向上向量垂直于法线向量。现在我想找到从一个对象到另一个对象的唯一旋转,该如何做? 我有一个方法来找到一个向量和另一个向量之间的旋转,它的工作原理。问题是,我需要关心两个向量:法线向量和向量向量。如果我使用这个方法从对象1旋转法向量到对象2的正常向量,向上向量可能指向错误的方向,他们需要是平行的。 是找到最短
..
我有两个对象,每个对象有两个向量: 正常向量 喜欢这张图片: 向上向量垂直于法线向量。现在我想找到从一个对象到另一个对象的唯一旋转,该如何做? 我有一个方法来找到一个向量和另一个向量之间的旋转,它的工作原理。问题是,我需要关心两个向量:法线向量和向量向量。如果我使用这个方法从对象1旋转法向量到对象2的正常向量,向上向量可能指向错误的方向,他们需要是平行的。 是找到最短
..
我有两个对象,每个对象有两个向量: 正常向量 喜欢这张图片: 向上向量垂直于法线向量。现在我想找到从一个对象到另一个对象的唯一旋转,该如何做? 我有一个方法来找到一个向量和另一个向量之间的旋转,它的工作原理。问题是,我需要关心两个向量:法线向量和向量向量。如果我使用这个方法从对象1旋转法向量到对象2的正常向量,向上向量可能指向错误的方向,他们需要是平行的。 是找到最短
..
我使用对象的模型矩阵在OpenGL中显示一个对象,我从我预先存储的对象位置和一个应用于旋转的四元数构建。我需要在应用旋转和变换(对象出现在屏幕上的坐标)后,找到我的对象的最终笛卡尔坐标在3D 。 解决方案 如果我理解正确,你有一个对象;如果您在未应用任何变换的情况下呈现,则其中心位于 [0,0,0] 。 您在3D空间中有一个点 [a,b,c] 。您将转换应用于modelview矩阵。
..
我需要一个更快的四元数矢量乘法例程为我的数学库。现在我使用规范 v'= qv(q ^ -1),这产生与将向量乘以从四元数形成的矩阵相同的结果,因此我相信这是正确的。 到目前为止,我已经实现了3个替代的“更快”的方法: #1,我不知道从哪里得到这个: v'=(q.xyz * 2 * dot (q.xyz,v))+(v *(qw * qw-dot(q.xyz,q.zyx)))+(c
..
我已经成功地通过四元数实现了Arcball旋转,但是当相机的方向向量与向上的向量平行时,我会感到困惑。目前,当方向向量和向量向量的点积超过0.99时,我只是限制沿x轴(节距)的旋转。在Maya(或Max,XSI,其中使用arcball旋转)例如,您可以非常顺利地在一个完整的圆周围旋转。我希望有一个类似于Maya旋转的解决方案。 谢谢 解决方案 您需要同时调整视图法向量(VNV)和向上
..
我已经成功地通过四元数实现了Arcball旋转,但是当相机的方向向量与向上的向量平行时,我会感到困惑。目前,当方向向量和向量向量的点积超过0.99时,我只是限制沿x轴(节距)的旋转。在Maya(或Max,XSI,其中使用arcball旋转)例如,您可以非常顺利地在一个完整的圆周围旋转。我希望有一个类似于Maya旋转的解决方案。 谢谢 解决方案 您需要同时调整视图法向量(VNV)和向上
..
我目前正在建立我自己的四元数相机。据我所知,你只需要一个四元数来完全指定相机的方向(纠正我,如果我错了)。那么,我将如何创建视图矩阵?我正在使用C ++作为编程语言。 任何帮助都会感激。 解决方案 首先有一些注意事项。你会看到很多明显冲突的公式在网上和文学上关于这个问题。大多数冲突只是明显的。一些是真正的冲突,但这是因为有人得到了数学错误。问题是没有一个正确的方法来做到这一点。你需要
..
在C / C ++中进行四元数计算的任何好的库? 旁注:任何好的教程/示例?我有google的,并已到前几页,但也许你有一些演示/实验从compsci或数学课程,你可以/将分享? 感谢 解决方案 我是Irrlicht四元组的粉丝类。它是zlib许可,并很容易从Irrlicht提取: Irrlicht Quaternion文档 quaternion.h
..
我想乘以2个四元数,它们存储在 cv :: Mat 结构中。我希望功能尽可能高效。到目前为止,我有以下代码: / **四元数乘法 * * / void multiplyQuaternion(const Mat& q1,const Mat& q2,Mat& q) { //第一个四元数q1(x1 y1 z1 r1) const float x1 = q1.at ; float>
..
我在世界空间有一些对象,让我们说(0,0,0),并把它旋转到面(10,10,10)。 解决方案 这个问题没有意义。你说你想要一个对象“面对”一个特定的点,但是没有给出足够的信息。 首先,面对方向是什么意思?在OpenGL中,这意味着本地参考系中的 -z 轴与某些外部参考系中的指定方向对齐。为了使这种对准发生,我们需要知道对象的相关轴当前“面向”的方向。 但是,仍然没有定义唯一的
..
我有一个对象,我想通过键旋转。物体应该偏航,俯仰和滚转。在尝试了很多,我想出了 glRotate 有它的局限性,它将不可能实现类似的功能。 我研究了一下,发现了基于四元数的旋转。 我已经阅读了关于四元数并且理解得很好的例子,但是如何在我的OpenGL程序中实现它们仍然是一个谜。有谁知道一个小例子吗?不是如何实现四元数类,而是如何使用它。 解决方案 最重要的是实现将构建旋转矩阵的
..
我有一个四元数和欧拉角之间转换的算法。 公共静态的Vector3 ToEulerAngles(此四元Q) { //存储欧拉弧度 的Vector3 pitchYawRoll =新的Vector3角(); 双SQW = q.W * q.W; 双SQX = q.X * q.X; 双SQY = q.Y * q.Y; 双SQZ = q.Z * q.Z; //如果四元数归一化的单
..
经过一番思考,我想出了以下code使用SSE两个四元数相乘: 的#include< pmmintrin.h> / * SSE3内部函数* // *两个四元数的乘法(X,Y,Z,W)×(A,B,C,D)* /__m128 _mm_cross4_ps(__ M128 XYZW,__m128 ABCD) { / *两个四元数的产品为:* / / *(X,Y,Z,W)=(XD + YC-
..
是否有一个旋转的四元数再presentation转换为欧拉角再presentation现有的算法?为欧拉旋转次序重新presentation是已知的,可以是任何的六个置换(即XYZ,XZY,YXZ,YZX,ZXY,ZYX)。我见过一个固定的旋转顺序(通常是NASA标题,银行,滚惯例),但不是任意的旋转顺序算法。 此外,因为有一个单一方向的多个欧拉角再presentations,这样的结果将是不明
..