将OpenGL的glRotated转换为Maya的cmds.rotate

时间:2013-04-03 18:11:44

标签: c++ python opengl maya

我有一个C ++ / OpenGL程序,它可以在各种旋转时创建很多柱面,因此它们都显示为连接。我在一个导出方法上添加了为Maya编写相同绘制方法的python脚本,所以我可以加载脚本。

我知道当OpenGL创建并旋转圆柱体时,它会将它与Z轴对齐它旋转并通过它的“基础”进行平移。

所以我一直小心我的Maya转换在任何转换之前移动枢轴,并且还要将柱子预先对齐到OpenGL的标准(然后冻结转换,从而创建OpenGL基础)。

翻译似乎都移动到了正确的位置,但我担心我是否正确地进行了旋转功能之间的转换。我知道Maya和OpenGL都是以度为单位进行旋转。但是,OpenGL中的函数是:

glRotated(angle, x, y, z);

在Maya的Python中:

cmds.rotate(x-deg, y-deg, z-deg);

所以我一直在做的是从OpenGL中取 angle 并将它乘以Maya方法的给定轴:

cmds.rotate(angle * x, angle * y, angle * z);

我认为这会起作用并给我我想要的东西。但旋转似乎仍然没有。我无法找到天气的良好解释,或者可能以我期望的方式工作。那么有人可以证实这种关系吗?

1 个答案:

答案 0 :(得分:1)

只有当旋转轴与其中一个主轴对齐时,这一般不会起作用。

您的旋转以轴+角度给出,您需要将其转换为欧拉角。您可以在阅读之后手动执行此操作,例如在维基百科上,或者你可以构造一个MQuaternion,使用setAxisAngle()方法(使用弧度,而不是度数),然后将其转换为MEulerAngle。