莱哥 发表于 2006-5-27 18:07

利用图形页实现动画的方法

<P>    计算机图形的动画显示实际上是一系列静止图像在不同位置的重放,大部分动态现实程序模拟运动的基本方法是相同的,即在屏幕某一显示位置上先擦出一个静止图像,然后在临近的位置上绘出下一副图,程序重复的执行擦出和绘制过程,就产生所需要的动画效果.这种动画方式对于简单的图形效果是很好的,但对于较为复杂的图形来说,效果就不是很好了,为了解决这一问题,用多页显示绘图的方法很有效. </P>
<P>    在turbo c的图形子系统中,提供了两条重要的页面设置函数,即设置图形输出活动页函数setactivepage()和设置可见图形页函数setvisualpage(),其用法为: </P>
<P>    #include<GRAPHICS.H> void far setactivepage(); <BR>    void far setvisualpage(); </P>
<P>图形页实际上是一个虚假页面,是内存中开辟的一块内存缓冲区.活动图像也可以是当前显示页,也可以是非显示页,当用函数setactivepage()选定某一页为活动页后,其后所有的图形输出都针对该页,有了多个图形页,程序就可以将图形输出到一个非显示屏幕页上,然后通过调用setvisualpage()改变可见页来快速显示,关闭图形页面中的画面.</P>
<P>    多个图形页交替显示的过程如下: 在所用的两个页面中,当一个可见页面用于显示时,另一个关闭页用于绘图.当新的画面上成后,就把两页进行转换,原作为显示用的页面在用来绘制新的图形.一般可把画面显示顺序作如下安排,第一页用于显示动画过程的1,3,5...等画面,第二页用于显示2,4,6...等画面,如此交替下去,利用页面转换技术进行动态显示,图形的擦出和重画过程都在后台进行,屏幕上出现的仅是整幅画面的瞬间切换,其动态效果十分平滑,如下面的程序. </P>
<P>#include &lt;graphics.h&gt;<BR>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;alloc.h&gt;<BR>#include &lt;math.h&gt;<BR>main()<BR>{void * ptr;<BR>int gd=DETECT,gm;<BR>float i;<BR>initgraph(&amp;gd,&amp;gm,"d:\\tc");<BR>setactivepage(1);<BR>setcolor(RED);<BR>setfillstyle(1,14);<BR>fillellipse(10,10,10,10);<BR>ptr=malloc(imagesize(0,0,20,20));<BR>getimage(0,0,20,20,ptr);<BR>randomize();<BR>setactivepage(0);<BR>for(i=0;i&lt;3000;i++)<BR>putpixel(random(640),random(480),random(15));<BR>for(i=0;i&lt;6.28*4;i=i+0.005)<BR>{putimage(300+8*(cos(i)+i*sin(i)),240+6*(sin(i)-i*cos(i)),ptr,COPY_PUT);<BR>putimage(300+8*(cos(i)+(i)*sin(i)),240+6*(sin(i)-(i)*cos(i)),ptr,COPY_PUT);<BR>if(kbhit()) break;<BR>delay(10);<BR>}<BR>getch();<BR>closegraph();<BR>}</P>

dexingtuohai 发表于 2007-7-10 19:48

太牛拉

yuerhb 发表于 2007-7-13 10:21

<P>不错</P>

页: [1]

编程论坛