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 很可能会出错。
我正准备在 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 很可能会出错。