OpenGL 内插动画的演示 点此下载: http://rorger.download.youkuaiyun.com/ //rorger, 2011 //linearAnimation.cpp //内插动画的演示 #include "myglbase.h" #include "glut.h" #include "windows.h" #include "math.h" void drawPolygon(Point2* array,int numberOfPoints) { glBegin(GL_LINE_LOOP); for (int i=0;i<numberOfPoints;i++) { glVertex2d(array[i].x,array[i].y); } glEnd(); } //多边形A到多边形B的渐变,t为时间参数 [0-1] void drawTween(Point2 *arrayA ,Point2* arrayB,int numberOfPoints,double t) { Point2* arrayC = new Point2[numberOfPoints]; for (int i=0;i<numberOfPoints;i++) { arrayC[i] = arrayA[i]+t*(arrayB[i]-arrayA[i]); } drawPolygon(arrayC,numberOfPoints); delete arrayC; } void testTween() { double numberOfPoints=11; double min=0, max=1.0; Point2 arrayA[]= { Point2(0,10), Point2(-1.5,7), Point2(-0.8,7), Point2(-4,3.5), Point2(-0.6,3.5), Point2(-0.6,0), Point2(0.6,0), Point2(0.6,3.5), Point2(4,3.5), Point2(0.8,7), Point2(1.5,7) }; Point2 arrayB[]= { Point2(2.5,10), Point2(-1,10), Point2(-1,0), Point2(0.8,0), Point2(0.8,3.8), Point2(4,3.8), Point2(4,5.8), Point2(0.8,5.8), Point2(0.8,8), Point2(6,8), Point2(6,10) }; for (double t=min;t<=max;t+=0.1) { glClear(GL_COLOR_BUFFER_BIT); drawTween(arrayA,arrayB,numberOfPoints,t); glFlush(); Sleep(fabs(t-0.5)*1000); } } 看看效果吧: 第一张是刚刚开始的状态,第二张是中间状态,第三张是结束状态。