将已经围绕另一个枢轴转换的GL对象的轴心居中?

时间:2014-07-27 02:49:22

标签: c++ opengl blender maya glm-math

我正在寻找使用openGL着色器在对象上居中和偏移旋转轴的最佳方法。 3D应用程序在处理此问题方面存在差异。


我有一个对象,我将平移设置为(0,2,2),旋转到(90,0,0)并将轴移动到(5,2,0)然后旋转(或不旋转) )任意。然后我想"居中枢轴"在对象上转换为bb中心

我尝试过这种modelMatrix的变体,但在所有场景中都没有成功,其中pivRT与BBcenter不同: modelM = translationM * pivRT * glm::inverse(pivotM) * rotationM * scaleM * pivotM;

在Maya中

我以枢轴为中心"对象上没有用户可见的值更改。在其他应用程序(如blender)中,当您将枢轴居中时,翻译会发生变化 - 事实上,您的对象翻译将成为枢轴翻译。阅读xform命令或MTransformationMatrix类,Maya将转换矩阵视为

,了解其工作原理
  

[SP]×[S]×[SH]×[SP]×[ST]×[RP]×[滚装]×[R]×[RP]×[RT]×[T]

     

Rt是" 旋转支点翻译"矩阵是   引入转换以在移动枢轴时保留现有的旋转变换。这用于防止对象移动时   对象枢轴点不在原点并且枢轴移动。   [RT]

我相信这种旋转轴转换矩阵的工作原理比转换器中转换值发生变化的blender更直观,但我也无法实现。

1 个答案:

答案 0 :(得分:3)

如果我正确地按照你的例子,这将是如何:

  1. 将数据透视移至(5,2,0)
  2. 围绕新枢轴旋转对象(假设绕z轴旋转2弧度)
  3. 在对象上重新显示枢轴
  4. 围绕x轴旋转对象(关于新的居中枢轴)90度
  5. 通过(0,2,2)
  6. 翻译对象

    使用glm,这将是模型矩阵的代码:

    glm::mat4 Step1 = glm::translate(glm::mat4(1.0), glm::vec3(5,2,0));
    glm::mat4 Step2 = glm::rotate(Step1, 2.0, glm::vec3(0,0,1));
    glm::mat4 Step3 = glm::translate(Step2, glm::vec3(-5,-2,0));
    glm::mat4 Step4 = glm::rotate(Step3, 1.57, glm::vec3(1,0,0));
    glm::mat4 Step5 = glm::translate(Step4, glm::vec3(0,2,2) + glm::vec3(5,2,0));
    

    列表中的步骤3在技术上分两部分完成:在第二次旋转之前平移对象,然后在最后的翻译步骤中再次将其翻译回来。