How to rotate a cube by its center
我正在尝试使用键盘旋转一个装满小立方体的"立方体",该键盘可以工作,但效果不是很好。
我正在努力将旋转的枢轴点设置到大"立方体" /世界的正中心。如在该视频中看到的那样,大立方体的正面(初始)面的中心是我当前旋转的枢轴点,当我稍微旋转世界时,这有点令人困惑。
为更好地解释它,当我使用键旋转多维数据集时,似乎正在移动多维数据集的初始面。因此从这个angular来看,枢轴点可能还不错,但是我的代码有什么问题呢?我不明白为什么它要向前移动,而不是整个立方体在中心移动?
在生成所有小立方体的情况下,我在3个for循环(x,y,z)中调用了一个函数,该函数返回
1 2 | cubeMat = scale(cubeMat, {0.1f, 0.1f, 0.1f}); cubeMat = translate(cubeMat, {positioning...); |
对于旋转本身,向左旋转的一个简短示例如下所示:
1 2 3 4 5 6 7 8 9 | 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个循环中也是如此:
1 2 | program.setUniform("ModelMatrix", total_rotation * cubeMat); cube.render(); |
我已阅读到我应该使用
您正在通过右乘法累加旋转矩阵。这样,所有旋转都在所有先前转换产生的局部坐标系中执行。这就是为什么您的右旋转会导致向上旋转后转一圈(因为它是局部坐标系中的右旋转)。
但是您希望旋转位于全局坐标系中。因此,只需还原乘法顺序:
1 | total_rotation = rotation * total_rotation; |