Ady*_*y96 3 opengl 3d rotation projection-matrix glm-math
我正在尝试使用键盘来旋转一个装满小立方体的"立方体",这种键盘可以工作但不是很好.
我正在努力将旋转点设置到大"立方体"/世界的中心.正如你在这个视频中看到的那样,大立方体的前(初始)面的中心是我现在旋转的枢轴点,当我稍微旋转世界时,这有点令人困惑.
为了更好地解释它,当我使用键来旋转立方体时,看起来我正在移动立方体的初始面.因此从这个角度来看枢轴点可能没问题,但我的代码有什么问题?我不明白为什么它正在前面移动,而不是整个立方体的中心?
在生成所有小立方体的情况下,我调用3 for for循环(x,y,z)中的函数,然后函数返回,cubeMat因此我可以在视频中看到所有生成的多维数据集.
cubeMat = scale(cubeMat, {0.1f, 0.1f, 0.1f});
cubeMat = translate(cubeMat, {positioning...);
Run Code Online (Sandbox Code Playgroud)
对于旋转本身,向左旋转的简短示例如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
在这3个周期内也是这样的:
program.setUniform("ModelMatrix", total_rotation * cubeMat);
cube.render();
Run Code Online (Sandbox Code Playgroud)
我已经读过我应该使用transformation枢轴点设置到中间但是在这种情况下,我如何设置位于世界中心的小立方体内的枢轴点?那个立方体显然是x=2, y=2, z=2因为在循环中,我生成立方体从开始x=0.
您正在通过右乘法累积旋转矩阵.这样,所有旋转都在由所有先前变换产生的局部坐标系中执行.这就是为什么右旋转在向上旋转后导致转弯的原因(因为它是局部坐标系中的右旋转).
但是你希望你的旋转在全局坐标系中.因此,只需恢复乘法顺序:
total_rotation = rotation * total_rotation;
Run Code Online (Sandbox Code Playgroud)