2012-02-08 60 views
-2

我想移动一个对象(我有一个简单的矩形),并且我想将它移动到特定的位置并返回(也许永远重复)。OpenGL Noob - > 2D动画

我知道我应该在矩阵转换(gltranslate)中有一个变量,但是在哪里/如何使这个变量变为动画并为每个帧设置动画。

回答

0

很难肯定你是哪个阶段的,但假设你已经有一个在屏幕上的矩形图中:

无论你有你的“drawMyRectangle”功能创建这些变量:

//Your starting position 
float startPositionX; 
float startPositionY; 
//Your ending position 
float endPositionX; 
float endPositionY; 
//The value that describes where in between these positions you are 

float translationAlpha; 
float animationDirection; 

所以填写在这些值中,translationAlpha从0开始,animatingForward从1开始。

我建议在单独的函数中执行此下一部分,但您需要代码来执行动画,只需要

void step() 
{ 
    translationAlpha += .01 * animationDirection;//.01 is the per 
    if (animationDirection > 0.0 && translationAlpha >= 1.0 || 
     animationDirection < 0.0 && translationAlpha <= 0.0) { 
     animationDirection *= -1.0; 
    } 
} 

听起来好像你保持简单,所以每次画画时都要打电话。

所以确保你有一个glPushMatrix和一个glPopMatrix包围你的绘图。 后您pushMatrix和你打电话给你画的附加前:

glTranslate2f(startPositionX + translationAlpha * (endPositionX - startPositionX), 
       startPositionY + translationAlpha * (endPositionY - startPositionY)); 

,涵盖了真正原始的方式做你所描述的,也考虑这个伪代码,因为我不知道你使用的是什么功能和你怎么样处理你的矩阵。

+0

感谢您接受我的回答,如果您需要进一步澄清,请随时发表评论或与我联系。 – 2012-02-22 19:50:09

0

这是一个模糊的问题,但在这里。基本上,您需要为矩形的某个位置(矩形本身或其他位置)存储位置。

每一帧,你都会调用你的Update方法来更新动画中的所有对象。这应该更新矩形的位置。

每一帧,您还可以调用您的Draw方法,该方法在当前位置绘制矩形(您可以使用glTranslate作为其一部分)。

+0

因此,举个例子,如果我不得不同时动画对象,会发生什么? – user461316 2012-02-08 00:52:55

+0

根据您要使用的对象数量,您可能需要将关于它们的信息抽象出来。该类还可以包含一个render()函数,该函数将负责根据OpenGL矩阵的位置更改OpenGL矩阵堆栈,然后绘制到屏幕上。同样在该类中将会是一个执行必要动画的update()函数。 – kevintodisco 2012-02-08 02:00:15

0

对于一个旨在试验OpenGL调用和矩阵堆栈的简单程序,您可以创建一个全局变量来跟踪翻译。根据你使用的窗口库(GLUT,Qt等),你将不得不提供一个动画函数来运行每一帧,这将改变翻译。它会是这个样子(我的例子使用GLUT):

void animate() 
    { 
     /* Add some value to your translation */ 
     /* Perhaps use a sinusoidal function if you want oscillating behavior */ 

     glutPostRedisplay(); 
    } 

你将不得不表明你的窗库,该功能必须定期调用:

glutIdleFunc(animate); 

最后,正如你所提到的,您只需调用glTranslatef()并在绘制四边形之前将其传递给您的全局变量(取决于您想要移动的轴)。