声明为局部变量时,不会发生旋转GLfloat对象.当它被声明为全局时,它会相应地旋转,它需要全局的原因是什么?OpenGL程序的display()函数是否会调用其他东西?
我在想的是你可能会尝试这样做(rot在函数中不是全局的):
GLfloat rot = 0.1;
glRotatef(rot, 0.0f, 1.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
它不会旋转之后绘制的对象.
这是因为glRotatef绝对旋转.您正在为每个绘制的图像应用0.1的恒定旋转,因此它们不会移动.
您不必rot全局存储,您可以使用您旋转的对象的模型存储它,并执行如下操作:
glRotatef(myObj->rotation, 0.0f, 1.0f, 0.0f);
... draw myObj->triangles ...
myObj->rotation += speed; // speed can be e.g. 0.1
Run Code Online (Sandbox Code Playgroud)
注意:请记住,如果你myObj->rotation += speed;在渲染功能中执行旋转速度将与渲染速度成比例(在更快的计算机上速度更快),这通常是不希望的.为避免这种情况,您可以检查已用时间,并仅在该时间长于50毫秒时进行评估.