Articles of 旋转

尽管mouselock – 团结,获取mousemovement

我有lockcursor,所以光标不离开屏幕,但现在我必须旋转一个基于鼠标移动的对象(想想garrys国防部项目旋转),但鼠标光标明显locking在中心,有无论如何得到input从鼠标? public void GetRotated() { Debug.Log(Input.GetAxis("Mouse X").ToString() + ", " + Input.GetAxis("Mouse Y").ToString()); gameObject.transform.localRotation = new Quaternion(Input.GetAxis("Mouse X") * RotationSpeed * Time.deltaTime, Input.GetAxis("Mouse Y") * RotationSpeed * Time.deltaTime, 0, 0); }

用四元数正确旋转

我有一个旋转大理石的问题。 我已经用Matrix.CreateFromYawPitchRoll和Matrix.CreateRotation尝试过了,但是有一些问题,我认为这是由于Gimbal锁效应。 所以,我尝试使用四元数 ,而没有改变。 当只在一个轴上移动时,它可以正常工作,但是当旋转发生在两个不同的轴上时,大理石依然在错误的轴上旋转。 这是我的代码: // declarations Vector3 Position = Vector3.Zero; Vector3 Rotation = Vector3.Zero; Quaternion qRotation = Quaternion.Identity; AbsoluteBoneTransforms = new Matrix[Model.Bones.Count]; Model.CopyAbsoluteBoneTransformsTo(AbsoluteBoneTransforms); 在Update方法中: Position += speed; Rotation = speed * MathHelper.ToRadians(-1.5f); Quaternion rot = Quaternion.CreateFromAxisAngle(Vector3.Right, Rotation.Z) * Quaternion.CreateFromAxisAngle(Vector3.Backward, Rotation.X); qRotation *= rot; 在Draw方法中: effect.World = AbsoluteBoneTransforms[mesh.ParentBone.Index] * Matrix.CreateFromQuaternion(qRotation) * Matrix.CreateTranslation(Position); 怎么了? 编辑 […]

将3轴向量转换为旋转matrix

我想从3个形成轴的向量(3dsmax)中获得一个旋转matrix(所有3个向量彼此alignment90度) 我读过的地方是我可以建立一个旋转matrix,只需在每一行中插入一个vector(来源: http : //renderdan.blogspot.cz/2006/05/rotation-matrix-from-axis-vectors.html ) 所以,我用这些示例向量构建了一个matrix x轴:[-0.194624,-0.23715,-0.951778] y轴:[-0.773012,0.634392,0] z轴:[-0.6038,-0.735735,0.306788] 但由于某种原因,如果我尝试将这个matrix转换成eulerangles,我会收到这个旋转:(eulerAngles 47.7284 6.12831 36.8263)…这是完全错误的,并且根本不alignment我的3个向量。 我知道轮换是很难理解的,可能会有人点亮吗? 🙂

pygame – 避免精灵抖动旋转的图像

是否有一个共同的技巧,让周围的精灵改变方向“太快”,并导致他们的精灵显示不规律? 在这个项目中,玩家通过确定鼠标的X和Y坐标与它自己的obj.rect.center之间的abs()距离,在8个方向上移动。 如果绝对值小于obj.speed ,它只是移动到那个点。 如果它更大,它会移动它的速度允许它朝这个方向移动的距离。 当绘制精灵的时候, obj.direction根据obj.direction通过使用一个名为SPINNER的字典将其存储的默认值传递给pygame.transform.rotate 。 def draw(obj): drawImg = pygame.rotate.transform(obj.img, SPINNER[obj.direction]) drawCtr = drawImg.get_rect(center=obj.rect.center) DISPLAYSURF.blit(drawImg, drawCtr) 这对愚蠢的AI人物来说很好,这些人物通常只能进行很less的路线修正 – 但是,鼠标的obj.direction会导致玩家的obj.direction很快更新,看起来很混乱。 有没有简单的方法来遏制这种行为? 我的第一个猜测是让播放器对象停留在保持原有状态的值上,然后确定要应用的旋转量,但是我有一种更好的解决方法是将该责任分配给“视图”而不是“模型” ”。 我并不坚持任何有关MVC的硬性规定,但是我正试图充分区分“类似于观点的方法”对类似“模型”的对象所做的“类似于控制器”的改变,如果这是有道理的。

怎样才能获得两个四元数之间的相对取向?

如何获得给定两个方向的相对方向(用四元数q0和q1 )?

Monogame中的边界框供鼠标采摘

大家好,我正在实现这个鼠标管理器,以便能够拾取对象。 我的应用程序主要在三维空间使用纹理四边形。 我在monogame中使用边框,但是我的解决scheme缺乏准确性。 现在我所拥有的是: http : //imgur.com/oySTCay 你可以清楚地看到问题是什么,所以这个解决scheme可能不是最好的。 这是我的方法来计算边界框: public BoundingBox GetBoundingBox() { Matrix transform = Node.GetTransformForBoundingBox(); vertices[0] = Vector3.Transform(new Vector3(0, 0, 0), transform); vertices[1] = Vector3.Transform(new Vector3(Texture.Width * m_fTexturescale, 0, 0), transform); vertices[2] = Vector3.Transform(new Vector3(0, (Texture.Height * m_fTexturescale) * -1, 0), transform); vertices[3] = Vector3.Transform(new Vector3(Texture.Width * m_fTexturescale, (Texture.Height * m_fTexturescale) * -1, […]

JavaScript:围绕其中心旋转一个canvas以获得2D双面轮廓

我一直在使用JavaScript和HTML制作2D双面滚动游戏。 游戏设置在空间中,玩家角色可以在其中(上,下,左,右键)飞行,并旋转他周围的世界(A和D键)。 这里是HTML和JavaScript代码: <body onkeydown="keyDown(event)" onkeyup="keyUp(event)"> <canvas id="graphics" width=600 height=400 style="position:absolute;margin:0 auto;vertical-align:middle;background-image:url('Black.png');"</canvas> <script> //VARIABLES var gameCanvas = document.getElementById("graphics"); var grafx = gameCanvas.getContext("2d"); var player = new GameObject("Character1NoAAInvert.png", 268, 160, 64, 59); var maxBlock = 5; var block = new Array(); for (var i = 0; i <= maxBlock; i++) { block[i] = new GameObject('BlockInvert.png', i […]

我是否需要存储一个通用的旋转点/半径以便在对象变换的原点之外旋转?

我在执行非原点旋转时遇到了问题。 我有一个类Transform存储每个组件分别在三个三维向量的position , scale和rotation 。 这对于基于对象中心的局部旋转是很好的。 问题是除了原点旋转之外,如何确定/连接非原点旋转。 通常这可以通过用于中心旋转的变换旋转变换和非原点的变换旋转变换来实现。 问题是因为我正在存储单个组件,所以最终的Transformmatrix不会被计算出来,直到需要通过使用各个组件来填充适当的matrix。 (请参阅GetLocalTransform() ) 我是否还需要为世界旋转存储一个额外的旋转(和半径),还是有一种实现方法,只使用单一的旋转值? Transform.h #ifndef A2DE_CTRANSFORM_H #define A2DE_CTRANSFORM_H #include "../a2de_vals.h" #include "CMatrix4x4.h" #include "CVector3D.h" #include <vector> A2DE_BEGIN class Transform { public: Transform(); Transform(Transform* parent); Transform(const Transform& other); Transform& operator=(const Transform& rhs); virtual ~Transform(); void SetParent(Transform* parent); void AddChild(Transform* child); void RemoveChild(Transform* child); Transform* FirstChild(); Transform* LastChild(); […]

从点获得3D四旋转matrix

我有4个3D点,代表一个偶数的四个空间。 (所以3个点就足够了)我需要获得所有单独的转换(平移,旋转,尺寸),以便我可以在CSS 3D引擎中构建该四边形。 所以一个quad的默认法向量是[0,0,1]。 我到目前为止: // 4 points p0, p1, p2, p3 // normal normal = cross(p1 – p0, p2 – p0) // axis and angle axis = cross([0, 0, 1], normal) angle = arccos(dot([0, 0, 1], normal)) // rotation matrix rotationMatrix = matrix4.fromAxisAngle(axis, angle) // width and height width = sqrt((p2.x – p1.x)^2, (p2.y […]

平面转换中的错误

我有一堆共面点,坐在飞机P 。 我想把飞机翻译成Q 。 这是我做的: 我从P ,说a , b , c 。 它们的质心由c(a,b,c) 。 我selectO = c(a,b,c)和本地XYZ的本地原点为: x = normalize(Oa); v = normalize(Ob); z = x.crossProduct(v); y = x.crossProduct(z); 我将相同的方法应用于Q上的全局坐标,即d , e , f 。 O_ = c(d,e,f); x_ = normalize(Od); v_ = normalize(Oe); z_ = x_.crossProduct(v_); y_ = x_.crossproduct(z_); 然后,我使用如下的变换matrix: Matrix input = [x,y,z]; […]