Tag: 轮换

如何检索每个轴上的3D旋转角度?

我有一个Model3DGroup,它使用在对象的Transform属性上应用的AxisAngleRotation3D围绕任何x,y,z轴旋转。 问题是我无法控制网格上应用的各种旋转。 我需要在每个渲染循环的每个x,y,z轴上显示网格的角度。 我怎样才能做到这一点? 我尝试在对象上检索AxisAngleRotation3D对象,但它只给出了上次应用的旋转。 哪个不对。 例如,如果应用了Axis的旋转:Vector3D(1,1,0)角度:45 绕Z轴的实际旋转不是0.如何获得每个轴上的实际角度?

XNA中的四元数旋转

我正在做以下事吗? 显然不是原因,否则我不会在这里发布一个问题,但我正在尝试围绕另一个模型进行模型的四元数轮换。 假设我有一个具有vector3位置和浮动旋转角度的盒子模型。 我还有一个平截头体形状的模型指向盒子模型,它的位置可以说是盒子模型的50个单位。 平截头体还具有向量3位置和四元数旋转。 在场景1中,框和平截头体是“未旋转的”。 这一切都很好。 在场景2中,我只旋转盒子,我希望平截头体随之旋转(有点像追逐相机),截头体总是直接指向盒子,与盒子的距离与未旋转的距离相同。 显然,如果我只是通过对盒子和平截头体使用Matrix.CreateRotationY()来旋转模型和平截头体,则平截头体稍微向侧面偏移。 所以我认为围绕盒子的圆锥体的四元数旋转最好? 为此我尝试了以下,没有运气。 它在屏幕上绘制我的模型,但它也在屏幕上绘制了一个看起来像一个巨大的盒子,无论我移动相机多远,盒子总是在路上 为了测试,我有3个盒子和3个相关的截头体在我的Game1类中,我用位置和旋转初始化盒子[0] boxObject[0].Position = new Vector3(10, 10, 10); boxObject[1].Position = new Vector3(10, 10, 10); boxObject[2].Position = new Vector3(10, 10, 10); boxObject[0].Rotation = 0.0f; boxObject[1].Rotation = 45.0f; boxObject[2].Rotation = -45.0f; 所以所有3个盒子都以相同的位置绘制,但角度不同。 然后做截头,我发起他们的立场: float f = 50.0f; frustumObject[0].Position = new Vector3(boxObject[0].Position.X, boxObject[0].Position.Y, boxObject[0].Position.Z + f); frustumObject[1].Position […]

如何逐渐旋转物体以面对另一个物体转动最短距离

我正在尝试旋转一个精灵,取决于它与直接朝向目标有多少度(或者rad,我更喜欢度数),问题是当目标到达某个位置时精灵决定旋转整个360度以其他方式而不是做额外的10。 这张照片可能更好地解释了这个问题 蓝色方块=目标 红色方块=对象 绿线=它想要的旋转 黑线=当前旋转 棕色箭头=如何旋转以实现此目的 红色箭头=我希望它如何旋转。 请注意,情况1总是起作用,取决于它旋转的方式,但是情况2总是进行旋转,无论是当前旋转的“右”还是“左”。 这是我用来旋转对象的代码。 Vector2 distance = new Vector2(target.worldPos.X – this.worldPos.X, target.worldPos.Y – this.worldPos.Y); float wantRot = (float)Math.Atan2(distance.Y, distance.X); if (this.rotation wantRot) this.rotation -= MathHelper.ToRadians(45) * Time.deltaTime; 我想要实现的是根据红色箭头而不是棕色箭头旋转(在案例2中)。 注意:我不是编程方面的专家,我在过去的一年中不时完成它(主要是简单的2D射击/射击游戏),所以深入解释将不胜感激。 我也是学生学习编程。 PS:标题的建议也会受到赞赏,因为我完全不知道该放什么。