glRotatef() 在 Opengl 中工作很奇怪

glRotatef() works weird in Opengl

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

GLfloat angle;
void Init();

此外,我初始化了该变量并在 demo.cpp 中的 xyz(0,0,0) 实现了一个法线球体:

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 类型变量?

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