和风帆 戴昊奇 廖育武
(湖北文理学院,湖北武汉 441053)
浅议基于VC的图像水波动画系统
和风帆 戴昊奇 廖育武
(湖北文理学院,湖北武汉 441053)
基于Visual C++6.0这一开发环境,同时借助OpenGL编程,对图像予以相应的动画处理,从而让静态图像生动起来,具有一种水波涟漪效果。本文首先介绍了开发环境(硬件环境和软件环境),然后分析了图像动画设计(系统设计、系统框架设计思路以及系统实现步骤),接着讨论了系统的核心函数——涟漪(定义、产生、绘制),最后阐述了OpenGL的处理流程。
VC 图像 水波动画 涟漪
图像水波动画系统能够对图像予以相应步骤的动画处理,从而让静态图像生动起来,具有一种水波涟漪效果。对水波涟漪进行模拟时,将满足下述功能:1)系统界面是在根据OpenGL图形程序构建而成的整体框架下运行的;2)将后缀名称为.rgb的目标图片载入OpenGL图形处理程序;3)在执行程序的过程中,鼠标左键单击图片,该情况下,屏幕上便会基于鼠标单击处形成所谓的涟漪发生点,并展现水波涟漪荡漾一般的动态效果[1]。下文将针对基于VC的图像水波动画系统进行探讨。
硬件环境:要求计算机配置至少达到“P4 2.0G/80G/256M/52XCD”这一标准。软件环境:(1)Windows 2000/XP;(2)Microsoft Visual C++6.0;3)OpenGL开发库。
(1)系统框架设计:为达成水波涟漪效果,本系统需要应用到OpenGL图形程序,所以,需要对OpenGL绘制环境予以一系列必要设置,如对逻辑调色板进行设置等,待设置结束之后才允许进行后续操作。(2)水波动画设计:利用OpenGL程序按特定顺序对若干函数进行相应设计[2],以静态图像为目标对象,将其对应的纹理图像空间一一对应地映射到另一个空间,也就是所谓的帧缓冲图像空间,系统工作状态下载入图像,采用点击的方式便能够让图像给人一种涟漪的观感。
(1)创建单文档窗口,同时针对显示像素格式予以必要设置,准确定义窗口,如属性等;(2)两大描述表的连接,一个是Windows设备描述表,另一个是OpenGL绘制描述表;(3)绘制图形;(4)在退出绘图时,将两个描述表同时释放出来[3]。
(1)在MyRippleView.h中添加成员函数:添加成员函数以及成员变量→对场景进行渲染→对像素格式进行设置→对逻辑调色板进行设置→对OpenGL场景进行初始化→对OpenGL绘制描述表进行设置→对OpenGL调色板进行设置→对OpenGL设备描述表进行设置。(2)在MyRippleView.cpp中进行相关设置:对窗口所属类型进行设置→对OpenGL场景进行初始化→对当前绘制描述表进行设置→对像素格式进行设置→对场景进行绘制以及渲染[4]。对于OpenGL窗口而言,像素格式为关键属性之一,不仅涉及是否使用双缓冲,而且涉及颜色位数,同时还涉及类型和深度位数等。OpenGL带有强大的双缓存功能,可以用来高效地绘制动画。当计算机屏幕正在显示由前台缓存绘制完成的某一幅帧画面时,与此同时,后台缓存则会紧锣密鼓地进行下一帧画面的绘制,待绘制完成之后,便会在屏幕上显示出来,而此时的前台缓存与之相反,则在进行下一帧画面的绘制。程序将会应用到SwapBuffers()函数以实现对交换缓存的合理设置,即每执行完1次绘制过程,便会对前后台缓存进行1次交换,从而使得下一帧画面在屏幕后得以绘制完成。
涟漪所对应的数据结构定义主要包括:(1)涟漪所对应的几何位置;(2)涟漪所对应的纹理坐标;(3)涟漪所对应的缺省纹理坐标等[5]。
鼠标对目标图片进行左键单击,如此一来,便可以准确确定鼠标单击位置所对应的具体坐标,以此为基础,对涟漪形成位置所涉及的诸多参数予以准确计算。
对涟漪进行绘制时,需要从事先准备的振幅表中选择和调取相关数据,准确计算并有效确定纹理所对应准确坐标,接下来合理利用四边形模拟的处理方法,对网格区域内的所囊括的各个点予以顺序地依次绘制,具体操作过程如下:从涟漪振幅表中选择和调取相关数据→在网格中逐个绘制→绘制一个四边形→左下角顶点→左上角顶点→右上角顶点→右下角顶点→绘制结束。
在创建一个三维图形的过程中,其涉及的主要工作流程如下:(1)建模。一个是几何建模,另一个是行为建模;(2)设置观点。所谓设置观点指的是,对观察者所处于的空间位置进行准确描述;(3)设置环境。对环境的一些特征进行准确描述,主要包括光源以及空气能见度等[6]。图1为OpenGL的工作流程图。
本文针对基于VC的图像水波动画系统进行了相关研究,尤其重点讨论了图像动画设计以及核心函数,最终实现了对静态图像的有机转化,使其具有动态图像的相关特征,即水波涟漪效果。
[1]马义俊,巴力登.基于OpenGL的水波动画模拟[J].微计算机信息,2009,07:215-216+259.
[2]徐勇,闫玉宝,陈树越.基于延迟光照技术的水波动画研究[J].安徽农业科学,2010,18:9894-9896.
[3]鸡蛋面.水波倒影动画轻松做[J].电脑迷,2010,20:59.
[4]陈祥望,郑松,和睿,徐丹.基于图像的水波动画建模和实时绘制[J].云南大学学报(自然科学版),2013,S2:18-22.
[5]贾建军.水波荡漾动画效果的制作[J].中国教育技术装备,2011,02:106.
[6]吴献,张正球.一种用于水波动画的实时动态网格划分算法[J].福建师范大学学报(自然科学版),2012,05:42-47.
注:廖育武为指导老师。