草庐IT

quaternions

全部标签

javascript - 如何旋转 CannonJS 刚体?

有谁知道如何旋转CannonJS(物理库)CANNON.RigidBody?我试图让物体随相机旋转,所以两者都朝向相同的方向。我知道我必须修改四元数,但这不能正常工作:mPlayer.objectBody.quaternion.set(0,mPlayer.yawObject.rotation.y,0,1);它还会改变对象的Y轴位置,而不仅仅是旋转。Here'sademo(WASD移动红色矩形-这是我想要旋转的)Here'sthemainscript目前它会根据物理原理自动旋转。感谢您的帮助!编辑:我现在有点让它工作了。但是它没有完全旋转(整个360度)并且它旋转的Angular不太正确

javascript - 如何抵消要在局部轴上应用的全局方向力?

我想对对象的局部轴施加一个向前的力,但我使用的引擎只允许我在全局轴上施加一个力。我可以访问对象的全局旋转作为四元数。然而,我不熟悉使用quats(通常未受过高等数学训练)。这些信息是否足以抵消沿所需轴施加的力?怎么办?例如,要在全局范围内推进,我会这样做:this.entity.rigidbody.applyForce(0,0,5);但是为了保持沿物体局部轴施加的力,我需要根据物体的旋转四轴以不同的方式沿轴分布施加的力,例如:w:0.5785385966300964x:0y:-0.815654993057251z:0我研究了四元数试图解决这个问题,但是观看有关它们是什么以及为什么使用它

javascript - Three.js Object3d 圆柱体旋转对齐向量

我进行了广泛的搜索,但似乎无法弄清楚这个非常基本的东西。一两年前,我在stackoverflow和其他地方看到过其他示例,但它们无法与最新版本的Three.js一起使用。这是我正在处理的版本:http://medschoolgunners.com/sandbox/3d/.我试图让灰色圆锥与未标记的红色矢量完全对齐。IE。我希望圆锥体的尖端与矢量完全对齐,并从原点指向该方向。这是我现在的代码://FUNCTIONTOCREATEACYLINDERfunctioncreate_cylinder(radiusTop,radiusBottom,height,segmentsRadius,seg

java - 在 JavaFX 中正确旋转 3 轴上的 3D 对象

到目前为止,我在JavaFX中使用的旋转对象的方法是将其分为3组,每组都附加了一个Rotate并锁定到一个轴,如下所示:Rotateheading,roll,pitch;Groupnormalrotate,rollrotate,verticalrotate;heading.setAxis(newPoint3D(0,1,0));normalrotate.getTransforms().add(heading);roll.setAxis(newPoint3D(0,0,1));rollrotate.getTransforms().add(roll);pitch.setAxis(newPoin

java - 这个四元数旋转代码是如何工作的?

我试图了解四元数旋转的工作原理,我找到了这个迷你教程http://www.julapy.com/blog/2008/12/22/quaternion-rotation/但他做了一些我无法解决的假设,比如我如何才能“计算出围绕每个轴的旋转vector,只需围绕一个轴旋转vector。”以及他如何计算angleDegreesX,angleDegreesY和angleDegreesZ?有人可以提供一个工作示例或解释吗? 最佳答案 最简短的总结是四元数只是旋转矩阵的简写。4x4矩阵需要16个单独的值,而四元数可以表示4中完全相同的旋转。对于

c++ - 矩阵与位置、四元数和比例分量相乘

我的部分代码通过存储xyz位置、xyz比例和四元数来存储4x3矩阵的等效项。下面的代码片段:classtTransform{//datatVector4fm_Position;tQuaternionm_Rotation;tVector4fm_Scale;};我想将这些对象中的2个相乘(就好像它是一个矩阵乘法),我想知道是否有比将每个对象转换为矩阵更快/更好的方法,以这种方式进行乘法,然后再次提取结果位置、旋转和缩放? 最佳答案 健康警告,因为这是内存中的,完全未经测试。您需要为tQuaternion和tVector4定义或替换运算符

C++ OpenGL Quaternion for Camera 将它颠倒过来

当我向右移动目标并向上看直到它与-zaxis成180度并决定朝另一方向走时,它确实会看目标。Matrix4x4camera::GetViewMat(){Matrix4x4oRotate,oView;oView.SetIdentity();Vector3lookAtDir=m_targetPosition-m_camPosition;Vector3lookAtHorizontal=Vector3(lookAtDir.GetX(),0.0f,lookAtDir.GetZ());lookAtHorizontal.Normalize();floatangle=acosf(Vector3(0.0

c++ - OpenGL - 使用四元数围绕一个点旋转的相机

所以我目前使用四元数来存储和修改我的OpenGL场景中对象的方向,以及相机的方向。当直接旋转这些对象时(即说我想围绕Z轴旋转相机Z量,或者我想围绕X轴旋转对象X,然后沿其局部Z轴平移它),我有没问题,所以我只能假设我的基本旋转代码是正确的。但是,我现在正在尝试实现一个功能,使我的相机绕空间中的任意点旋转,但我遇到了很多困难。到目前为止,这是我想出的,但行不通(这发生在Camera类中)。//Gettheinverseoftheorientation,whichshouldrepresenttheorientation//"from"thefocalpointtothecameraQua

c++ - 四元数基变换

我有一个四元数,基于Y轴向上、X轴向右、Z轴朝向我的坐标系。现在我想根据这个四元数在另一个应用程序(C++)中移动一个角色。如果坐标系相同,这将没有问题,但此应用程序使用不同的坐标系。Z向上,X向右,Y穿过显示器(向内)。我试着简单地旋转四元数来调整坐标系,但我尝试的每一次旋转,看起来都不太正确。我的想法是我需要某种基本变换,但我不知道如何用四元数来做这个,有人知道如何对四元数执行基本变换吗?编辑我将EigenC++库用于四元数。这是我使用的四元数:QuaternionQX90(Eigen::AngleAxisf(M_PI/2.0,Eigen::Vector3f::UnitX()));

c++ - 四元数到方向 vector

我正在尝试将我的四元数转换为方向vector,以便我可以将我的相机朝它所面对的方向移动。我读到您可以先将四元数转换为旋转矩阵,然后再获取方向,所以我试过了。inlineMatrix4ToRotationMatrix(){Vector3forward=Vector3(2.0f*(GetX()*GetZ()-GetW()*GetY()),2.0f*(GetY()*GetZ()+GetW()*GetX()),1.0f-2.0f*(GetX()*GetX()+GetY()*GetY()));Vector3up=Vector3(2.0f*(GetX()*GetY()+GetW()*GetZ())