Questions tagged «rotation»

旋转是对象围绕特定轴的圆周运动。

2
我在两个轴上旋转一个对象,那么为什么它一直绕着第三个轴扭曲?
我看到很多问题经常出现,但都涉及到潜在的问题,但是它们都被给定功能或工具的细节所困扰。这是尝试创建一个规范的答案,我们可以在出现时向用户推荐-提供大量动画示例!:) 假设我们正在制作第一人称相机。基本思想是左右摇摆应偏航,上下左右俯仰。因此,我们编写了如下代码(以Unity为例): void Update() { float speed = lookSpeed * Time.deltaTime; // Yaw around the y axis using the player's horizontal input. transform.Rotate(0f, Input.GetAxis("Horizontal") * speed, 0f); // Pitch around the x axis using the player's vertical input. transform.Rotate(-Input.GetAxis("Vertical") * speed, 0f, 0f); } 或许 // Construct a quaternion or …

2
计算2D精灵的旋转力
我想知道是否有人有一种优雅的方式来计算以下情况。 我有一个(n)个正方形,随机形状的对象,但我们会假装它们都是矩形。 我们没有重力,因此从上到下的角度考虑空间中的物体。我在一个特定的正方形上向对象施加力(如下图所示)。 如何根据所施加的力在所施加的位置计算旋转角度。如果应用在中心方块中,它将笔直。我离开中心越远,应该如何表现?如何计算转速?
35 2d  rotation  physics  vector 

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

6
如何确保旋转的物体以正确的末端击中目标?
我正在研究一种投掷刀型武器,玩家可以自由瞄准然后投掷一把刀。刀在空中旋转,在碰撞时停止旋转,并将其自身与碰撞的物体作父母。旋转是通过动画处理的,而刀的路径是通过物理处理的。 我面临的一个问题是如何确保当刀与敌人碰撞时,刀将朝向他们。此刻有时会发生的情况是刀先嵌入敌人的手柄中。这显然是不现实的。同时,我认为如果刀首先与刀片碰撞,只刀“击中”敌人是非常不合理的,因为刀的旋转速度超出了玩家的控制范围。 我一直在观看许多类似武器的慢速杀伤镜头,每次抛出武器,它都会在空中旋转,而且魔术般地总是以叶片指向目标为目标。对于投掷距离将保持一致的游戏,这很简单。但是我不确定如何预测这一点,因为其中涉及许多不可预测的因素。刀的方向,刀的旋转,敌人的位置,与敌人的距离等。如果可能的话,我宁愿不必使用复杂的预测逻辑,因为游戏将用于相当低端的设备。有没有“烟和镜子”的方法来解决这个问题? 示例:https://youtu.be/0fav8lFpBko?t = 42s

3
如何根据另一个对象的偏移旋转对象?
我有一个围绕Y轴旋转的转塔的3D模型。该炮塔的加农炮明显偏离物体中心。我希望大炮而不是炮塔瞄准特定目标。但是,我只能旋转炮塔,因此我不知道为了达到目标而需要应用什么方程式。 下图说明了我的问题: 如果我的炮塔为“ LookAt()”目标,则来自加农炮的激光将完全错过所述目标。 如果这是完全自上而下的情况,并且加农炮与炮塔完全平行,那么我的逻辑告诉我,假目标应位于等于实际目标的位置,再加上与目标之间的偏移量相等的位置。炮塔和加农炮 但是,在我的实际情况下,我的摄像机倾斜60º,并且大炮有轻微的旋转。 下图说明了这种情况: 我不确定为什么,但是如果应用相同的偏移量,则它似乎仅在瞄准与转塔一定距离的同时起作用。 我的逻辑有缺陷吗?我在这里缺少基本的东西吗? 最终编辑:@JohnHamilton最新更新提供的解决方案以完美的精度解决了此问题。现在,我已经删除了用于说明错误实现的代码和图像。

2
使用四元数:我该怎么办?(没有数学)
我是游戏开发人员,没有学习数学。所以我只想使用四元数作为工具。为了能够进行3D旋转,有必要使用四元数(或矩阵,但在本问题中,我们先保留四元数)。我认为对于许多开发人员来说,使用它们很重要。这就是为什么我想分享我的知识并希望填补我的空缺。现在.... 据我了解: 四元数可以描述两件事: 3d对象的当前方向。 对象可以执行的旋转变换。(rotationChange) 您可以使用四元数: 乘法: 四元数endOrientation =四元数旋转Change *四元数currentOrientation; 因此,例如:我的3D对象向左旋转90°-我乘的旋转就是向右旋转180°,最后我的3D对象90°向右旋转。 四元数rotationChange =四元数endRotation * Quaternion.Inverse(startRotation); 这样,您将获得一个rotationChange,可以将其应用于另一个方向。 Vector3 endPostion =四元数rotationChange * Vector3 currentPosition; 因此,例如:我的3D对象位于位置(0,0,0)上,并且我乘以的旋转是向右旋转180°,我的端点类似于(0,-50,0)。在四元数内部有一个轴-以及围绕该轴的旋转。您围绕该轴Y度旋转点。 Vector3 rotationOffsetVector =四元数rotationChange * Vector3 currentOffsetVector; 例如:我的开始方向显示为UP-(0,1,0),我乘以的旋转方向是向右旋转180°,我的结束方向显示为向下。(0,-1,0) 混合(Lerp和Slerp): 四元数currentOrientation =四元数.Slerp(startOrientation,endOrientation,插值器) 如果插值器为1:currentOrientation = endOrientation 如果插值器为0:currentOrientation = startOrientation Slerp插值更精确,而Lerp插值更高效。 我的问题: 我到目前为止所解释的一切都正确吗? 四元数可以做到这一点吗?(不可以) 您还能对他们做什么? 两个四元数之间的点积和叉积有什么好处? 编辑: 更新了问题并提供了一些答案

4
如何围绕目标点旋转摄像机?
我正在绘制一个场景,其中摄影机可以在宇宙中自由移动。相机类跟踪视图(或注视)点,相机的位置以及向上矢量。然后将这些向量/点传递到gluLookAt。 平移和缩放几乎不容易实现。然而,我发现围绕转动一下点要多得多的问题。我想编写一个函数Camera.rotate,它具有2个角度,一个可以向上/向下旋转,另一个可以沿以视点为中心的假想球向左/向右旋转。 是否有捷径可寻? 我已经(简要地)阅读了有关四元数的信息,但是我想看看鉴于场景的构造相对简单,是否有更简单的解决方案。



4
如何在俄罗斯方块中旋转块
我有一个游戏板网格,该网格高20行,宽10列,其原点(0,0)位于左上角。我在玩四联体,由四个方块组成。我有每个块相对于左上角原点的x,y位置。我还具有枢轴的位置,即我希望围绕其旋转的点,该点相对于左上角的原点。 每个方块在游戏板正方形中具有整数位置,因此枢轴在方块之间具有小数位置,例如(10.5,10.5) 我的问题是:我可以使用哪个公式围绕枢轴旋转每个块? 我已经看过现有的类似问题和答案,但是找不到我可以工作的答案。 帮助将不胜感激。
16 c++  rotation 

6
如何围绕世界对齐的轴旋转对象?
我有一个Vector3,每个轴都有一个欧拉角。 通常,当我想创建旋转矩阵时,我将使用D3DXMatrixRotationX之类的函数从上方的旋转矢量传递相应的角度,然后将矩阵(ZXY)相乘以创建整体旋转矩阵,以用于形成完整的对象变换矩阵。 但是,此方法将在对象空间中产生一组旋转。也就是说,将向量(90,0,90)传递到我的方法中将在世界空间中有效地产生(90,90,0)的旋转。 有没有一种方法可以始终确保我的旋转矢量的每个分量导致围绕各自的世界空间对齐轴的旋转? 编辑: 这是当前情况的动画-我想要一种绕蓝色轴而不是红色轴旋转的方法。 编辑2: 只是要注意,我并不是在寻找涉及欧拉角的解决方案,而只是寻找一种可以表示围绕世界轴的多次旋转的变换的方法。

2
如何围绕3D中的任意点(而不是原点)旋转?
我有一些模型,我希望使用四元数以正常方式旋转,除了希望绕原点旋转以外,我希望它稍微偏移一些。我知道您并不是说在3D空间中绕点旋转。你说你绕轴旋转。因此,我将其可视化为围绕尾部不在本地原点的向量旋转。 我的渲染/物理引擎中的所有仿射变换都使用SQT(比例尺,四元数,平移;从Game Engine Architecture一书中借来的一个想法)存储。因此,我从这些组件中构建每个帧的矩阵,并将其传递给顶点着色器。在此系统中,先平移,然后缩放,然后旋转。 在一种特定情况下,我需要在世界空间中平移对象,对其进行缩放并围绕不以该对象的本地原点为中心的顶点旋转它。 问题:考虑到上述当前系统的限制,如何实现围绕原点以外的点进行局部旋转?自动支持任何可以仅使用矩阵描述如何执行此操作的人:)

2
如何使我的2D角色正常站立在斜坡上?
我已经在Unity3D(2D模式)中得到了这个角色...在一个看起来像这样的坡度中, 但是我希望角色沿着红线站立。 如何在Unity3d中制作? 我有这个设置。 我正在使用简单的Addforce进行运动...如果删除z位置约束,则会导致奇怪的运动,如滚动等等。

3
绕固定轴旋转对象
我试图让我的应用程序用户通过在屏幕上拖动手指来旋转在屏幕中央绘制的3D对象。屏幕上的水平移动表示绕固定的Y轴旋转,而垂直移动表示绕X轴旋转。我遇到的问题是,如果我只允许绕一个轴旋转,则对象旋转良好,但是一旦引入第二个旋转,该对象就不会按预期旋转。 这是正在发生的情况的图片: 蓝色轴代表我的固定轴。画出具有此固定蓝色轴的屏幕。这就是我要相对于对象旋转的对象。发生的是红色。 这是我所知道的: 围绕Y(0,1,0)的第一次旋转使模型从蓝色空间(称为空间A)移至另一个空间(称为空间B)。 尝试再次使用向量(1、0、0)旋转时,空间B中的x轴会旋转,而不是空间A中的x轴旋转,这不是我的意思。 考虑到我(想)知道的内容(为简洁起见,省略了W坐标),这是我尝试的操作: 首先使用四元数绕Y(0,1,0)旋转。 将旋转Y四元数转换为矩阵。 将Y旋转矩阵乘以我的固定轴x矢量(1、0、0),以获得相对于新空间的X轴。 使用四元数围绕这个新的X向量旋转。 这是代码: private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space float[] …

2
如何使用累积矩阵变换解决万向节锁定问题
我正在阅读Jason L. McKesson的在线“学习现代3D图形编程”书 到目前为止,我要解决万向节锁定问题以及如何使用四元数来解决它。 然而,就在这里,在四元数页面上。 问题的一部分是,我们试图将方向存储为一系列3个累积的轴向旋转。方向是方向,而不是旋转。方向当然不是一系列旋转。因此,我们需要将船舶的方向视为方向,作为特定数量。 我想这是我开始感到困惑的第一个地方,原因是因为我看不到方向和旋转之间的巨大差异。我也不明白为什么方向不能通过一系列旋转来表示... 也: 为此,首先想到的是将方向保持为矩阵。当需要修改方向时,我们只需对此矩阵进行转换,将结果存储为新的当前方向。 这意味着应用于当前方向的每个偏航,俯仰和横滚都将相对于该当前方向。正是我们所需要的。如果用户应用正偏航,则希望该偏航相对于它们当前指向的位置而不是相对于某个固定坐标系旋转它们。 我理解这个概念,但是我不理解如果累积矩阵变换可以解决此问题,那么上一页中给出的代码不仅如此。 这是代码: void display() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutil::MatrixStack currMatrix; currMatrix.Translate(glm::vec3(0.0f, 0.0f, -200.0f)); currMatrix.RotateX(g_angles.fAngleX); DrawGimbal(currMatrix, GIMBAL_X_AXIS, glm::vec4(0.4f, 0.4f, 1.0f, 1.0f)); currMatrix.RotateY(g_angles.fAngleY); DrawGimbal(currMatrix, GIMBAL_Y_AXIS, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f)); currMatrix.RotateZ(g_angles.fAngleZ); DrawGimbal(currMatrix, GIMBAL_Z_AXIS, glm::vec4(1.0f, 0.3f, 0.3f, 1.0f)); glUseProgram(theProgram); …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.