我正在尝试使用键盘旋转一个充满小立方体的“立方体”,虽然可以工作,但不是很好。
我正在努力将旋转的中心点设置为大“立方体”/世界的正中心。如您在视频中所看到的,目前我的旋转中心点是大立方体/世界初始面的中心,当我稍微旋转世界时,这有点令人困惑。
更好地解释一下,当我使用键来旋转立方体时,它看起来像是移动了立方体的初始面。因此,从这个角度来看,旋转中心点可能没问题,但我的代码哪里出了问题?我不明白为什么它会沿着前面的面而不是整个立方体通过其正中心移动?
如果要生成所有小立方体,则在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;
而这三个循环中还有这个:
program.setUniform("ModelMatrix", total_rotation * cubeMat);
cube.render();
我读到应该使用transformation
将枢轴点设置为中心,但在这种情况下,如何将枢轴点设置在位于世界中心的小立方体内部?由于在循环中,我从x=0
开始生成立方体,因此该立方体显然是x=2,y=2,z=2
。
rotation
之后你做了什么。 - Nico Schertler