【发布时间】:2017-11-05 16:30:44
【问题描述】:
我正在尝试使用键盘旋转一个充满小立方体的“立方体”,但效果不是很好。
我正在努力将旋转轴心点设置为大“立方体”/世界的中心。正如你在video 上看到的,大立方体的前(初始)面的中心是我现在旋转的轴心点,当我稍微旋转世界时,这有点令人困惑。
为了更好地解释它,看起来我在使用键旋转立方体时正在移动立方体的初始面。所以从这个角度来看,枢轴点可能没问题,但是我的代码有什么问题?我不明白为什么它是按正面移动,而不是整个立方体按其中心移动?
在生成所有小立方体的情况下,我在 3 个 for 循环 (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 个 for 循环中也是这样:
program.setUniform("ModelMatrix", total_rotation * cubeMat);
cube.render();
我已经读过我应该使用transformation 将轴心点设置在中间,但在这种情况下,我如何在位于世界中心的小立方体内设置轴心点?那个立方体显然是x=2, y=2, z=2,因为在for循环中,我从x=0开始生成立方体。
【问题讨论】:
-
视频中旋转的不是立方体中心,也就是你想要的吗?
-
我可能描述得不太好,抱歉。它在世界中间“旋转”,但由于某种原因,键盘控制“移动”正面,或者使用控件,看起来我正在通过按住正面来旋转立方体。
-
对不起,我不明白你想说什么。我已经看了几次视频,但我看不出有什么奇怪的地方。
-
注意,当我向上旋转立方体,然后在视频结束时向右旋转。立方体的前(初始)面朝上,看向天空,然后我向右旋转,但是坐在“桌子”上的整个立方体应该向右旋转。相反,正面被拖到立方体的右侧,因此不再仰望天空。
-
啊,我想我明白了。请在计算后显示您对
rotation的处理。
标签: opengl 3d rotation glm-math projection-matrix