在opengl中暂停一段时间的函数

时间:2011-04-01 19:52:35

标签: opengl

我有一个函数Drwa()这是在屏幕上渲染一个三角形。我还有另一个Draw_poly()在屏幕上呈现一个矩形。我也同时旋转矩形和三角形。我想保持旋转速度不同,我将如何做?

假设我在屏幕上移动一个物体而另一个在旋转,那我该怎么办?这就是为什么我寻找对象的功能移动将保持时间限制和旋转对象将不会保持时间。所以旋转将是快速的,对象的移动将是缓慢的

3 个答案:

答案 0 :(得分:2)

首先,将您的旋转定义为每秒角度。然后在你的主绘制函数中,计算以秒为单位的经过时间,乘以角速度,你就完成了。

答案 1 :(得分:0)

我想与我的答案分开。

genpfault 的答案可能是你所需要的,但如果你想制作一个好的动画,你需要设计一个更好的软件。

Here,看看我的回答。但是,阅读另一个question,我认为你缺少一些基本点:学习OpenGL架构,练习每个OpenGL入口点,阅读书籍。

最后,但并非最不重要的是,我建议您在 stackoverflow 上搜索已经告知的答案。这应该是一个问题&回答网站......

答案 2 :(得分:-1)

旋转一个比另一个更少/更慢:

static float rot_a = 0.0;
static float rot_b = 0.0;

rot_a += 1.0;
rot_b += 0.5;

glPushMatrix();
glRotatef( rot_a, 0, 0, 1 );
Draw_A();
glPopMatrix();

glPushMatrix();
glRotatef( rot_b, 0, 0, 1 );
Draw_B();
glPopMatrix();

或者你可以在不阻塞渲染线程的情况下启动修改对象位置和sleep()的一些线程。

Position obj_a;
Position obj_b;

void thread_1()
{
    while( !done )
    {
        sleep(1);
        modify_pos( obj_a );
    }
}


void thread_2()
{
    while( !done )
    {
        sleep(2);
        modify_pos( obj_b );
    }
}


void draw()
{
    glPushMatrix();
    position_object( obj_a );
    Draw_A();
    glPopMatrix();

    glPushMatrix();
    position_object( obj_b );
    Draw_B();
    glPopMatrix();
}


int main()
{
...
launch_thread( thread_1 );
launch_thread( thread_2 );

...
return 0;
}