基于VC的图像水波动画系统的研究

时间:2022-05-21 12:13:10

基于VC的图像水波动画系统的研究

摘要:以Visual C++6.0为开发环境,采用OpenGL编程,对图像进行动画处理,实现了使静态图像生成动态的水波涟漪效果。系统分两步实现:第一步,系统框架设计,系统需在基于单文档的OpenGL图形程序的基本框架下运行,需对OpenGL的绘制环境进行设置,设置完成后才开始进行水波涟漪的设计,第二步,水波动画设计。在基于单文档的OpenGL图形程序基本框架的基础上进行编程。

关键词:水波动画;VC;OpenGL

中图分类号:TP317.4文献标识码:A文章编号:16727800(2012)009016503

1OpenGL处理流程与功能分析

1.1OpenGL的处理流程

(1)几何操作。①针对每个顶点的操作:每个顶点的空间坐标需要经过模型取景矩阵变换、法向矢量矩阵变换,若允许纹理自动生成,则由变换后的顶点坐标所生成的新纹理坐标替代原有的纹理坐标,再经过当前纹现矩阵变换,传递到几何要素装配步骤;②几何要素装配:不同的几何要素类型决定采取不同的几何要素装配方式。若使用平直明暗处理,线或多边形的所有顶点颜色则相同;若使用裁剪平面,裁剪后的每个顶点的空间坐标由投影矩阵进行变换,并由标准取景平面进行裁剪,再进行视口和深度变换操作。如果几何要素是多边形,还要做剔除检验,最后生成点图案、线宽、点尺寸的像素段.并赋上颜色、深度值。

(2)像素操作。内主机读入的像素首先解压缩成适当的组份数目,然后进行数据放大、偏置,并经过像素映射处理,根据数据类型限制在适当的取值范围内,像素最后写入纹理内存,使用纹理映射或光栅化生成像素段;如果像素数据由帧缓冲区读入,则执行放大、偏置、映射、调整等像素操作,再以适当的格式压缩。像素拷贝操作相当于解压缩和传输操作的组合,只是压缩和解压缩不是必须的,数据写入帧缓冲区前的传输操作只发生一次。

(3)像素段操作。当使用纹理映射时,每个像素段将产生纹素,再进行雾效果计算、反走样处理。接着进行裁剪处理、一致性检验(只在RGBA模式下使用)、模板检验、深度缓冲区检验和抖动处理。若采用颜色素引模式,像素还要进行逻辑操作;在RGBA模式下则进行混合操作。

根据着色模式不同,决定像素段采取颜色屏蔽还是指数屏蔽,屏蔽操作之后的像素段将写入到适当的帧缓冲区。如果像素写入模反或深度缓冲区,则进行模板和深度检验屏蔽,而不用执行混合、抖动和逻辑操作。

对于创建一个三维图形,大致可以包括以下3个主要环节:①建模:包括几何建模和行为建模,几何建模处理物体的几何和形状的表示,行为建模处理物体的运动和行为的描述;②设置观点:描述观察者的空间位置;③设置环境:描述环境的特征,如光源、空气能见度等。

1.2功能需求分析

图像的水波动画程序开发目的是对图像进行动画处理,实现使静态图像生成动态的水波涟漪效果。本系统将采用OpenGL图形应用程序设计界面编程,在Visual C++6.0环境下实现。

水波涟漪的模拟将实现以下功能:①系统界面是在基于单文档的OpenGL图形程序的基本框架下运行;②在程序中载入后缀为 .rgb的图片;③在程序运行时使用鼠标左键单击图片,此时屏幕上以鼠标单击的位置为中心,产生涟漪的发生点,并开始进行水波涟漪荡漾的效果。

1.3开发环境简介

(1)硬件环境。计算机的基本配置不低于P4 2.0G/80G/256M/52XCD。

(2)软件环境。Windows 2000/xp;Microsoft Visual C++ 6.0;OpenGL开发库。

2.1系统设计

图像的水波动画程序开发目的是对图像进行动画处理,使静态图像生成动态的水波涟漪效果。为实现这个目的,系统设计可以分为两步:

(1)系统框架设计。为了保证水波涟漪的实现,系统需在基于单文档的OpenGL图形程序的基本框架下运行,需对OpenGL的绘制环境进行设置,如逻辑调色板、像素格式、OpenGL初始化、场景绘制与渲染等,设置完成后才开始进行水波涟漪的实现。

(2)水波动画设计。在基于当文档的OpenGL图形程序的基本框架的基础上进行编程,依次完成对水波涟漪的定义、生成新的涟漪纹理、纹理的绘制等函数的设计,将静态图像从纹理图像空间映射到帧缓冲图像空间,系统运行时载入图像,通过点击图像实现水波涟漪的动态效果。

2.2系统框架设计思路

①在单文档窗口的创建过程中,设置好显示的像素格式,并按OpenGL的要求设置好窗口的属性和风格;②首先获得Windows设备描述表,然后将其与事先设置好的OpenGL绘制描述表联系起来;③调用OpenGL命令进行图形绘制;④退出OpenGL图形窗口时,释放OpenGL绘制描述表RC和Windows设备描述表DC。

2.3系统实现步骤

(1)在MyRippleView.h中添加成员函数。

(2)在MyRippleView.cpp中设置窗口类型、设置逻辑调色板、初始化OpenGL场景、设置像素格式、场景绘制与渲染。

此函数在256色模式下,把一个像素颜色的内部值按线性关系转换为8bit输出到屏幕上,其中红色占最低位的3bit,绿色占中间的3bit,蓝色占最高位的2bit,Windows将这个8bit值看作逻辑调色板的索引值。因此,生成调色板时,把索引值从低位到高位分成3-3-2共3个部分,将每一部分映射到0~255中去,这样3bit映射为{0,36,73,109,146,182,219,255},2bit映射为{0,85,170,255},最后把3部分组合起来成为一种颜色。

像素格式是OpenGL窗口的重要属性,它包括是否使用双缓冲、颜色位数和类型以及深度位数等。像素格式可由Windows系统定义的所谓像素格式描述子结构来定义4结语

本文针对图像的水波动画展开研究,首先介绍了OpenGL的工作流程,其次对系统进行了详细的设计,最后给出了系统在操作过程中的核心代码。

参考文献:

[1]徐惠.Visuail C++数字图像实用工程案例精选[M].北京:人民邮电出版社,2005.

[2]陈前华.水波的计算机动画模拟[D].合肥:中国科学技术大学,2001.

[3]杨怀平,胡事民,孙家广.一种实现水波动画的新算法[J].计算机学报,2002(6).

[4]陈前华,邓建松,陈发来.滴水涟漪的计算机动画模拟[J].计算机研究与发展,2001(5).

上一篇:孟群:面对话筒心存敬畏 下一篇:网络示范课程建设研究