如何按中心

时间:2017-11-05 16:30:44

标签: opengl 3d rotation glm-math projection-matrix

我正在尝试旋转一个"立方体"充满了使用键盘的小立方体,但不是很好。

我正在努力将旋转的旋转点设置到大"立方体的正中心。 /世界。正如你在video看到的那样,大立方体的前(初始)面的中心是我现在旋转的枢轴点,当我旋转世界时,这有点令人困惑。

为了更好地解释它,当使用键旋转立方体时,我看起来正在移动立方体的初始面。因此从这个角度来看枢轴点可能没问题,但我的代码有什么问题?我不明白为什么它会从前面移动,而不是整个立方体的中心移动?

在生成所有小立方体的情况下,我调用3 for for循环(x,y,z)中的函数,函数返回cubeMat,因此我可以在视频中看到生成的所有立方体。< / p>

cubeMat = scale(cubeMat, {0.1f, 0.1f, 0.1f});
cubeMat = translate(cubeMat, {positioning...);

对于旋转本身,向左旋转的一个简短示例如下所示:

mat4 total_rotation; //global variable - never resets
mat4 rotation;       //local variable

if(keysPressed[GLFW_KEY_LEFT]){
            timer -= delta;
            rotation = rotate(mat4{}, -delta, {0, 1, 0});
}
... //rest of key controls
total_rotation *= rotation;

在这3个循环中也是这个:

program.setUniform("ModelMatrix", total_rotation * cubeMat);
cube.render();

我已经读过我应该使用transformation将枢轴点设置到中间但是在这种情况下,我如何设置位于世界中心的小立方体内的枢轴点?该多维数据集显然是x=2, y=2, z=2,因为在for循环中,我生成从x=0开始的多维数据集。

1 个答案:

答案 0 :(得分:5)

您正在通过右乘法累加旋转矩阵。这样,所有旋转都在由所有先前变换产生的局部坐标系中执行。这就是为什么右旋转在向上旋转后导致转弯的原因(因为它是局部坐标系中的右旋转)。

但是你希望你的旋转在全局坐标系中。因此,只需恢复乘法顺序:

total_rotation = rotation * total_rotation;