OpenGL-骨骼动画-骨骼围绕原点旋转

时间:2019-04-07 10:57:06

标签: opengl graphics 3d skeletal-animation

我正在关注关于YouTube(https://www.youtube.com/watch?v=f3Cr8Yx3GGA)上的骨骼动画的教程系列,并且遇到了一个问题–一切正常,除非当我旋转一根骨头(或“关节”)时,它们会旋转围绕场景原点,这意味着它们不会留在原地,而是会被平移。下图说明了该问题: Object is moved in addition to being rotated

如何进行翻译,以免发生翻译?我现在已经多次浏览本教程系列,但是无法确定哪个步骤可以阻止这种情况的发生。

代码非常大,分成大约十二个文件,而且我不知道哪个部分可能会引起问题,因此我认为将其全部发布在这里没有多大意义(它应该与即使我在Java中工作时使用的是C ++,也可以在教程中找到该代码。可以在https://github.com/TheThinMatrix/OpenGL-Animation上找到该教程的代码。如果您甚至可以就一般如何在骨骼动画中解决此问题提供一般性建议,那么对我来说,至少应该找出有问题的部分并尝试从那里解决是足够的。

2 个答案:

答案 0 :(得分:0)

旋转矩阵只能描述围绕原点(Wikipedia)的旋转。但是,旋转可与平移结合使用,以更改原点在何处获得所需效果。例如,您可以:

  1. 平移对象,使其以原点为中心
  2. 将对象旋转到所需方向
  3. 将对象转换回原始位置

或者,以一种不同但功能等效的方式来表达它:

  1. 将原点移动到对象的位置
  2. 将对象旋转到所需方向
  3. 将原点重置为原始位置

相关问题:Rotating an object around a fixed point in opengl

答案 1 :(得分:0)

您只需要注意旋转的内容即可。

一种解决方法:先旋转然后翻译。旋转对象的原点,然后将其平移到所需位置。

当整个程序发生变化时,请重复执行此操作。从原点启动对象,进行所需的旋转,然后平移到最终的静止位置。