如何通过立方体的中心旋转

Ady96

我正在尝试使用键盘旋转装满小立方体的“立方体”,但效果不是很好。

我正在努力将旋转枢轴点设置到大“立方体” /世界的正中心。正如您在此视频中看到的那样,大立方体的正面(初始)面的中心是当前旋转的枢轴点,当我稍微旋转世界时,这有点令人困惑。

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

如果生成所有小的多维数据集,我会在3中为循环(x,y,z)调用一个函数,然后该函数返回,cubeMat因此,您可以在视频中看到所有生成的多维数据集。

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

尼科·谢特勒

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

但是您希望旋转位于全局坐标系中。因此,只需还原乘法顺序:

total_rotation = rotation * total_rotation;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章