OpenGL 在进行自旋转时围绕对象旋转
Posted
技术标签:
【中文标题】OpenGL 在进行自旋转时围绕对象旋转【英文标题】:OpenGL rotation around an object while doing self rotation 【发布时间】:2016-11-12 09:41:50 【问题描述】:我正在尝试使用可编程管道在 OpenGL 中模拟行星系统。假设现在我有一颗质心为planet_A_FixedPoint
的行星A 和一颗质心为planet_C_FixedPoint
的行星C。我想让行星 C 以旋转轴 = normalize(planet_A_FixedPoint)
围绕行星 A 旋转,同时以旋转轴 = (0,1,0)
围绕自己的中心旋转。我想出了以下代码,但它似乎不起作用。
glm::mat4 rotateAroundPlanetA = glm::translate(glm::mat4(), planet_A_FixedPoint) * glm::rotate(glm::mat4(), degree, normalize(planet_A_FixedPoint)) \
* glm::translate(glm::mat4(), -planet_A_FixedPoint);
planet_C_M_Matrix = rotateAroundPlanetA * planet_C_M_Matrix;
glm::vec4 tempFixedPoint = rotateAroundPlanetA * glm::vec4(planet_C_FixedPoint, 1.0f);
planet_C_FixedPoint = vec3(tempFixedPoint.x, tempFixedPoint.y, tempFixedPoint.z);
glm::mat4 rotateAroundPlanetC = glm::translate(glm::mat4(), planet_C_FixedPoint) * glm::rotate(glm::mat4(), degree, vec3(0, 1, 0)) \
* glm::translate(glm::mat4(), -planet_C_FixedPoint);
planet_C_M_Matrix = rotateAroundPlanetC * planet_C_M_Matrix;
以上代码实现的效果是行星C绕自身旋转,绕normalize(XA, YA, ZA)轴旋转,但是与行星A的原点(XA, YA, ZA)不对齐。
谁能告诉我哪里错了?
【问题讨论】:
请贴出你的真实代码,上面的sn-p连编译都编译不了。 嗨~我已经发布了我的真实代码。 【参考方案1】:首先,如果您使用范围运算符 (::),请在任何地方使用它。 其次,您的代码具有预期的行为。如果你想让行星C与行星A的原点对齐,那么你的旋转轴需要是垂直平面,它包含原点C和原点A。
【讨论】:
垂直平面是什么意思? 对不起,我的意思是“旋转轴需要与平面正交......” 但现在的问题是行星 C 围绕预期的轴旋转,但中心位于原点 (0, 0, 0)。不是行星 A(XA、YA、ZA) 如果插入正确的轴而不是 normalize(planet_A_FixedPoint) 你的代码对我来说很好 但是如果我只有两个点,planetA 和 planetC,我如何获得飞机以上是关于OpenGL 在进行自旋转时围绕对象旋转的主要内容,如果未能解决你的问题,请参考以下文章