C++ OpenGL恒定旋转角度
我最近在做一些openGL编程,它涉及基本的矩阵变换,如平移、旋转和缩放。我在做旋转时遇到了一些问题。这是我的问题 现在我使用可变旋转度和可变旋转步长来控制旋转。当旋转标志处于启用状态时C++ OpenGL恒定旋转角度,c++,opengl,graphics,rotation,glut,C++,Opengl,Graphics,Rotation,Glut,我最近在做一些openGL编程,它涉及基本的矩阵变换,如平移、旋转和缩放。我在做旋转时遇到了一些问题。这是我的问题 现在我使用可变旋转度和可变旋转步长来控制旋转。当旋转标志处于启用状态时 //inside paintGL function if(rotationFlag is on) rotationDegree += rotationStepSize if(rotationDegree > 360.0f) rotationDegree -= 360.
//inside paintGL function
if(rotationFlag is on)
rotationDegree += rotationStepSize
if(rotationDegree > 360.0f)
rotationDegree -= 360.0f
奇怪的是,因为我将旋转步长定义为非常小,旋转开始时非常慢,但随着时间的增加,它变得越来越快
我对这种现象提出了两种解释:
- 360f不是glm::rotate中DEGRE参数的值范围
- 该程序启动缓慢,导致paintGL被绘制到较少的屏幕。然后,随着程序变得稳定(或其他参数不变),mainLoopEvent的执行速度越来越快,导致paintGL的绘制量越来越大
int FGAPIENTRY glutGet( GLenum eWhat )
{
#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
int returnValue ;
GLboolean boolValue ;
#endif
switch (eWhat)
{
case GLUT_INIT_STATE:
return fgState.Initialised;
case GLUT_ELAPSED_TIME:
return fgElapsedTime();
}
我没有使用freeglut,但是看看文档,也许你应该试试GLUT\u已用时间
,而不是GL\u已用时间
然后像这样计算deltatime:
int preTime= 0;
while( ... )
{
int currentTime= glutGet(GLUT_ELAPSED_TIME);
int deltaTime = currentTime- preTime;
preTime = currentTime;
//... pass the deltaTime to whatever you want...
}
只是打赌,但您是否使用了
glLoadIdentity
或任何其他矩阵重置方法?如果不是,那么你正在旋转已经旋转的矩阵,这意味着步长增量是速度。对不起,我在问题细节中不清楚。我正在使用新的openGL,以可编程管道为特色。每次我都会将对象平移回原点,按rotationDegree中指定的角度旋转,并将对象平移回其原始位置。所有这些都放在一个矩阵中,然后我将把这个modelToWorld矩阵传递给顶点着色器。在每一帧之前,点保持检查矩阵是否为单位(或处于定义的初始状态…@Spektre是的,但我确实确保了这一点