GLM正交投影空间中如何实现物体绕自身中心旋转
解决方案
要实现物体绕自身中心旋转,需要按照**「移到原点→旋转→移回原位置」的顺序组合变换矩阵**,GLM 中矩阵为列主序,变换书写顺序和实际作用顺序相反,具体调整如下:
步骤1:计算物体自身中心点
你给出的顶点坐标范围是 X:600612,Y:100130,中心点坐标计算如下:
float centerX = (600.0f + 612.0f) / 2.0f; // 结果为606 float centerY = (100.0f + 130.0f) / 2.0f; // 结果为115
如果物体后续会动态移动,每次计算变换前都要根据实时位置重新计算中心点。
步骤2:按正确顺序组合变换矩阵
// 正交投影矩阵单独定义 glm::mat4 projection = glm::ortho(0.0f, width, height, 0.0f); // 组合变换矩阵:从右到左对应顶点的实际变换顺序 glm::mat4 transform = projection // 第三步:旋转完成后将物体移回原本的世界坐标位置 * glm::translate(glm::mat4(1.0f), glm::vec3(centerX, centerY, 0.0f)) // 第二步:绕原点(此时物体中心已经在原点)做旋转 * glm::rotate(glm::mat4(1.0f), glm::radians(45.0f), glm::vec3(0, 0, 1)) // 第一步:先将物体整体平移,让自身中心对齐坐标原点 * glm::translate(glm::mat4(1.0f), glm::vec3(-centerX, -centerY, 0.0f));
原写法问题说明
直接在投影矩阵基础上调用旋转,相当于直接对整个投影空间做旋转,默认的旋转中心就是坐标原点(也就是你正交投影配置的左上角(0,0)点),所以会出现物体绕左上角旋转的问题。
内容的提问来源于stack exchange,提问作者user15455820
相关产品推荐
相关产品推荐

