我最近正在做一些openGL编程,它会进行基本的矩阵变换,例如平移,旋转和缩放。旋转时遇到一些问题。这是我的问题。
现在我使用变量rotationDegree和变量rotationStepSize来控制旋转。当旋转标志打开时
//inside paintGL function
if(rotationFlag is on)
rotationDegree += rotationStepSize
if(rotationDegree > 360.0f)
rotationDegree -= 360.0f
这是奇怪的事情,因为我将rotationStepSize定义为非常小,旋转开始的速度非常慢,但随着时间的推移它变得越来越快!
我想出了这种现象的两种解释:
有谁知道如何解决这个问题?我搜索了使用glutget(GL_TIME_ELAPSED),但在我的机器上,这个函数报告" glutget:缺少ENUM句柄",这表明我的过量文件不完整,我猜?
那么有没有人知道如何修复枚举问题或者如何解决这个问题以创建一个场景,让我有一个以恒定速度旋转的物体?
非常感谢!
答案 0 :(得分:1)
根据freeglut_state.c,定义了glutGet函数。
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_ELAPSED_TIME
而不是GL_TIME_ELAPSED
?
并像这样计算deltatime:
int preTime= 0;
while( ... )
{
int currentTime= glutGet(GLUT_ELAPSED_TIME);
int deltaTime = currentTime- preTime;
preTime = currentTime;
//... pass the deltaTime to whatever you want...
}