1

我即将在 C++ OpenGL、MFC 应用程序中制作一个旋转球体。所以我声明了一个具有旋转速度的变量demo.h

GLfloat angle;
void Init();

此外,我初始化了该变量并在 xyz(0,0,0) 处实现了一个正常球体 demo.cpp

Init();
angle += 1;
glRotatef(angle, 0, 1, 0);
GLUquadricObj* a = gluNewQuadric();
gluSphere(a, 10, 100, 100);  //radius = 10

Init() 是用户定义的函数,用于初始化角度变量的值:

void Init() = {
    angle = 1.0;
}

在这种情况下,球体旋转良好。但是如果我angle += 1;改为angle += angle;,那么 Sphere 不会以相同的速度旋转并最终消失 :( 我不知道这两者有什么区别。将“+=”运算符应用于 GLfloat 类型变量是否有问题?

4

1 回答 1

3

angle += angle每次更新时将旋转值加倍。根据您的更新频率,旋转几乎会立即变得完全不稳定,并且最多会在几秒钟内溢出浮点的可能值,从而变为 INFINITY,OpenGL 最有可能出错。

于 2020-11-04T10:04:42.567 回答