【发布时间】:2015-02-07 16:18:24
【问题描述】:
我正在做本教程末尾的练习: Link
但是我坚持“创建一个围绕对象旋转的相机”
( position = ObjectCenter + ( radius * cos(time), height, radius * sin(time) ) );
我使用上面提供的代码来创建以下旋转
GLfloat radius = 10.0f;
position = glm::vec3(0.0f,0.0f,0.0f) + glm::vec3(radius * cos(glfwGetTime()), 0.0f, radius * sin(glfwGetTime()));
使用这个,场景围绕 (0,0,0) 旋转 10,我认为这是立方体的中心,但事实并非如此,所以立方体每隔一段时间就会闪过窗口作为场景旋转。
那么我究竟如何找到对象中心?当我绘制立方体时,我无法从代码中理解我告诉它居中的位置。
作为参考,初始位置 vec 是
glm::vec3 position = glm::vec3( 0, 0, 5 );
【问题讨论】:
-
您正在进行全局旋转而不是局部旋转。您需要通过将相机乘以玩家位置的倒数,将相机移动到相对于玩家的本地空间中。然后应用您的轮换。
-
或将对象旋转到位
-
编辑:玩家的位置 ==> 玩家的本地矩阵
-
感谢 cmets。关于将对象旋转到位,我一直在尝试平移旋转并将模型矩阵平移回 do 循环,但是它不旋转,我应该对旋转函数中的角度使用某种 sin 函数吗?
-
好的,我让立方体旋转,结果发现将 deltaTime 除以 1000 使旋转角度变得如此微小,什么也没发生!还意识到除非场景中有其他项目,否则您将无法判断是旋转对象还是围绕对象旋转相机。