struct Point{
float x;
float y;
};
使用这个结构我制作了4个点,并为它们分配了值。然后使用Points
的实例创建图片中显示的行。
PO.x = -0.5f;
PO.y = 0.5f;
P1.x = -1.0f;
P1.y = -0.5f;
Q0.x = 0.5;
Q0.y = -1.0f;
Q1.x = 0.7f;
Q1.y = 0.1f;
glPushMatrix();
glLineWidth(2.5);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex2f(PO.x, PO.y);//PO
glVertex2f(P1.x, P1.y);//P1
glVertex2f(Q0.x, Q0.y);//QO
glVertex2f(Q1.x, Q1.y);//Q1
glEnd();
glPopMatrix();
虚线应该是从点P0到Q0的过渡,因此是第四个。
我所理解的是这种技术的概念LERP在两条线(或关键帧)之间创建中间帧。我不明白它是如何工作的。
x = x_start + ((x_final - x_start) * time)// where time is a value between zero and one
以上是此技术的公式,但我如何将其应用到我的过度应用程序中?
无法在线找到任何使用GLUT和LERP演示动画的资源。
答案 0 :(得分:1)
每次没有用户输入时,都会调用idle函数。
void idle()
{
timer += vec;
cout << timer << endl;
if (timer > 1){
vec = 0;
}
glutPostRedisplay();
}
因为我有点我需要得到中间点,这是通过使用这个函数来完成的。
float interpolate(float startPos, float finalPos, float time) {
return startPos + ((finalPos - startPos) * time);// ;
}
此函数根据时间绘制直线上的点。
T0.x = interpolate(PO.x, Q0.x, timer);
T0是中间关键帧,我插入了我的线的起点和终点。因此插值。
如果没有计时器递增,它将不会产生&#34;动画&#34;
的效果T0.x = interpolate(PO.x, Q0.x, timer);
T0.y = interpolate(PO.y, Q0.y, timer);
T1.x = interpolate(P1.x, Q1.x, timer);
T1.y = interpolate(P1.y, Q1.y, timer);
glPushMatrix();
glLineWidth(2.5);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex2f(T0.x, T0.y);
glVertex2f(T1.x, T1.y);
glEnd();
计算点后,使用绘制线函数创建线。