免费文献传递   相关文献

基于OpenGL的荷花开放过程模拟



全 文 :基于OpenGL的荷花开放过程模拟
刘金定 ,伍艳莲 ,梁敬东 (南京农业大学信息科技学院 ,江苏南京 210095)
摘要 从虚拟植物基本步骤出发 ,用VC ++6.0调用OpenGL实现了荷花开放过程的计算机模拟。实践表明 ,基于OpenGL的虚拟现实
技术可以精确地绘制出现实荷花的整体形态和生长模型。
关键词 虚拟植物;OpenGL;可视化;几何建模;纹理贴图
中图分类号 TP399  文献标识码 A  文章编号 0517-6611(2008)25-11054-03
Simulation of the Opening Process of Water Lily Based on OpenGL
LIU Jin-ding et al (College of Information Science and Technology , Nanjing Agricultural University , Nanjing, Jiangsu 210095)
Abstract  Starting from the basic steps of the virtual plants , VC ++ 6.0 was used to call OpenGL to realize the computer simulation of the opening
process of water lily.The practices indicated that the virtual reality technology based on OpenGL could draw the overall shape and growth model of real wa-
ter lily accurately.
Key words Virtual plants;OpenGL;Visualization;Geometricmodeling;Texture mapping
作者简介 刘金定(1978-),男 ,江苏盐城人 ,助教 ,从事图象图形学
研究。
收稿日期 2008-06-18
  虚拟植物(Virtual Plants)是虚拟现实(VR)技术在农业中
的应用之一 ,虚拟植物就是利用虚拟现实技术模拟植物在三
维空间中的生长发育过程 。其主要特征是以植物个体为研
究中心 ,以植物的形态结构为研究重点 ,建立三维的模型 ,以
可视化方式反映植物的形态结构规律 ,如具有真实感的植株
个体或群体 。虚拟植物能够精确地反映现实植物的形态结
构 ,极具真实感[ 1] 。利用虚拟植物技术可以在电脑屏幕上设
计农作物 ,然后再进行实际培育或用基因工程技术繁殖出真
实的农作物 ,使农作物新品种具有虚拟植物的理想性状。笔
者选择荷花为模拟对象 ,用VC ++6.0调用OpenGL模拟荷
花的整体形态和荷花在水中缓慢绽放的过程 ,现介绍如下。
1 虚拟植物基本步骤
虚拟植物在计算机动画 、电影制作 、建筑设计 、虚拟现
实 、计算机辅助教学 、农林业和植物生态等方面都有重要的
应用。特别是将虚拟植物(农作物)生长技术应用于农业研
究更具有重要意义。对虚拟植物研究的一般步骤[ 2] :
(1)对不同生长条件 ,不同生育阶段的植物进行定性观
测 ,判别其生长模式 ,确定其描述形态结构的总体框架。
(2)定量化测定植物的拓扑结构 、几何特征 、机械性
质等。
(3)将测定的数据输入数据库 ,通过数理统计 、模式识别
等方法提取植物形态结构规则。
(4)模型依据生长规则模拟植物生长 ,使用可视化模型
构造成三维植物图形 ,再利用计算机图形学技术 ,如纹理映
射 、光照计算 、深度消隐 、反走样 、投影等 ,处理植物三维几何
结构 ,生成形象逼真的植物图形(图 1)。
2 荷花开放过程模拟
依照虚拟植物基本步骤 ,笔者对荷花开放过程进行模
拟 ,采用Visual C++ 6.0语言在调用OpenGL图形函数库的
基础上实现 。荷花以及开放时的主要特点:一朵荷花由若干
有层次的花瓣组成 ,花瓣的颜色由浅到深渐变;荷花从花苞
到渐渐开放的过程中 ,各个花瓣的角度和位置都不同 ,花朵
整体在水中的位置也不同。OpenGL集成了曲面造型 、图形
变换 、光照 、材质 、融合 、反走样 、雾化和纹理等复杂的计算机
图形学算法 ,具有强大的 2D和 3D图形处理能力[ 3] 。植物还
有一些不同于其他物体的特性 ,如枝条的弯曲 、植物的向光
性 、由季节更替和光照强弱等引起的植物各组织器官的尺
寸 、形状以及颜色等的变化[ 4] 。笔者对荷花开放过程的模拟
主要包括运行环境的构建 、花瓣绘制 、花朵绘制 、动态处理 、
水面绘制。
图1 植物生长模型与可视化步骤
Fig.1 Plant growth model and its visualization steps
2.1 VC环境搭建 ①设置像素格式 。OpenGL的像素格式
告诉系统在利用OpenGL 绘制图形时所采用的颜色模式 、颜
色的位数。要设置像素格式首先填充 PIXELFPRMATDE-
SCRIPTOR结构。 ②创建着色描述表(RC)。正如每一个
Windows 应用程序都有一个设备描述表(DC)一样 ,着色描述
表保存了与系统发生关系的重要信息。在程序开始时调用
GetDC 获取DC句柄 ,通过响应Windows消息WN-CREATE 来
创建当前的一个着色描述表。在关闭应用程序时调用视图
类消息函数OnDestory()删除着色描述表 。③创建用户界面 。
④释放绘制描述表 RC 和 Windows设备描述表DC。
2.2 花瓣建模 绘制花瓣及绘制一个曲面 ,曲面在图形学
上一般可采用二次或者三次曲面构建 ,比较典型的有 Bezier
曲面 、Nurbs曲面等 ,或采用大量的三角片 、四边形片等的方
法进行绘制。该设计在绘制花瓣时采用大量四边形片来构
成花瓣曲面。四边形由 4个顺序定义的顶点决定(图 2)。每
片花瓣由 16×8个四边形片组成 ,绘制原理见图 3。
组成花瓣的各个四边形顶点的具体位置通过下列代码
确定:
for(float i=0;i<8;i ++){
  glBegin(GL-QUADS);
安徽农业科学 , Journal of Anhui Agri.Sci.2008 , 36(25):11054-11056                  责任编辑 张杨林 责任校对 傅真治
注:1~ 4为 4个顶点。
Note:1-4 stands for four apices.
图 2 荷花花瓣绘制原理
Fig.2 The drawing principle of water lily petals
图3 基本四边形绘制定义
Fig.3 The drawing and definition of the basic quadrangle
  for(float j=0;j<16;j ++){
glVertex3f(cosf(PI/18.0f*i)*cosf(PI/2.0f -PI/
18.0f*j),
sinf(PI/2.0f-PI/18.0f*j),
sinf(PI/18.0f*i)*cosf(PI/2.0f-PI/18.0f*j));
//第一个顶点 ,其他顶点对应代码略
花瓣线框模式绘制结果见图 4。
图 4 线框模式的花瓣
Fig.4 The petal with the wire frame model
2.3 花瓣纹理贴图 在三维图形中 ,纹理映射(Texture Map-
ping)的方法运用得很广 ,尤其描述具有真实感的物体 。纹理
映射的过程包括:定义纹理;控制滤波;说明映射方式;绘制
场景 ,给出顶点的纹理坐标和几何坐标。纹理映射只能在
RGB方式下执行 ,不能运用于颜色表方式。纹理图片从外部
文件中读入 。打开文件后从位图的第 54个字节开始是图像
信息 ,将色彩传给图象 ,位图要求为 24位的 512×512像素的
位图。在对花瓣贴图时 ,把从荷花图片上截取的 bmp图片分
成 8×16个小四边形片 ,分别对应于花瓣的 8×16个四边形
片 ,从而实现定义纹理。通过下列代码可以实现花瓣的纹理
贴图 。
for(float i=0;i<8;i ++){
glBegin(GL-QUADS);
 for(float j=0;j<16;j ++)
glTexCoord2f(0.125*i ,0.062 5*j);
glVertex3f(cosf(PI/18.0f *i)*cosf(PI/2.0f -PI/
18.0f*j),
sinf(PI/2.0f-PI/18.0f*j),
sinf(PI/18.0f*i)*cosf(PI/2.0f-PI/18.0f*j));
获得四边形图片的第一个顶点 ,其他 3个顶点的获得
略。接下来通过下列代码进行纹理控制与融合处理:
glTexParameterf (GL- TEXTURE- 2D , GL- TEXTURE-
WRAP-S ,GL-CLAMP);//S方向纹理缩限 ,所有>1的纹理
元素的值置为 1
glTexParameterf (GL- TEXTURE- 2D , GL- TEXTURE-
WRAP-T ,GL-CLAMP);// T方向纹理缩限 ,所有>1的纹理
元素的值置为 1
glTexParameterf(GL-TEXTURE-2D ,GL-TEXTURE-MAG-
FILTER ,GL-LINEAR);//放大滤波 ,GL-LINEAR利用线形插
值 ,效果好但计算量大
glTexParameterf(GL-TEXTURE-2D ,GL-TEXTURE-MIN-
FILTER ,GL-LINEAR);//缩小滤波
glTexEnvf(GL-TEXTURE- ENV , GL- TEXTURE- ENV-
MODE ,GL-DECAL);
贴图前后的渲染效果对比见图 5。
注:左为贴图前;右为贴图后。
Note:The lef t graph is the petal before mapping and the left is that after
mapping.
图 5 贴图前后的花瓣效果
Fig.5 The petal effect before and after mapping
2.4 荷花绘制 一朵荷花由 2层花瓣构成 ,每层有 10片花
瓣 ,通过OpenGL的旋转 、缩放命令 ,绘制出荷花。
for(int i=0;i<10;i ++){//10瓣花瓣
 glRotated(45*i ,0.0 , 1.0 ,0.0);//每 45°为 1片 ,循环
绘制
 glScalef(0.6f ,0.7f ,0.6f);//缩小
 Lotus1();//调用花瓣
 glTranslatef(0.0f , 0.03f ,0.0f);//上移一点绘制第 2层
 glRotated(22 ,0.0 ,1.0 ,0.0);//错开绘制
 glScalef(0.8f ,0.8f ,0.8f);//再缩小
 Lotus1();//绘制第 2层花瓣
最终建模的荷花见图 6。
1105536卷 25期                刘金定等 基于OpenGL的荷花开放过程模拟
2.5 水面绘制 OpenGL融合是一种基本的图形图像处理
技术。融合是通过 2种颜色的混合(Blending)来完成特殊颜
色的绘制和透明物体的绘制。融合的方式有 2种:一种是屏
蔽掉深度缓存的记忆 ,完成绘制后面的物体。一种是利用颜
色的透明方法。完成融合可以利用OpenGL的 RGBA颜色模
式 ,该颜色模式在完成颜色定义的同时 ,其中代表颜色透明
度的Alpha分量 ,当启动融合处理时 ,将参加颜色融合运算 ,
完成物体的融合显示 。
在OpenGL中 ,Alpha值可取在[0.0 ,1.0] ,Alpha分量在 24
位真彩色上附加了另外 8位信息 ,用来进一步描述 256级不
同的透明度值。当 OpenGL在融合模式下启动 ,并采用颜色
分量进行透明处理时 ,物体将自动产生变色效果(与平滑明
暗渲染一样)。由于物体边缘自动产生了过渡色 ,因此物体
的边缘将更加平滑 ,并且会达到反走样效果。
//启动融合处理 ,源因子为将要绘制的颜色Alpha分量 ,
水面为接近背景 ,但是稍亮
glEnable(GL-BLEND);
glBlendFunc(GL-SRC-ALPHA ,GL-ONE-MINUS-SRC-
ALPHA);
glColor4f(0.0f ,0.5f ,1.0f , 0.3f);
glPushMatrix();//用一个矩形表示水面
glBegin(GL-QUAD-STRIP);
  glVertex3f(-1.0f ,1.0f , 0.0f);
  glVertex3f(-1.0f , -1.0f , 0.0f);
  glVertex3f(1.0f , 1.0f ,0.0f);
  glVertex3f(1.0f , -1.0f , 0.0f);
glEnd();
glPopMatrix();//屏蔽融合处理
glDisable(GL-BLEND);
加入水面后的渲染效果见图 7。
2.6 荷花开放过程的动态模拟  动画是一系列的图像以
足够快的速度显示的过程。动画的产生从三维的观点来看
是由于形态 、位置以及颜色的变化 。而放在OpenGL 世界里
就是数据的变化 ,变化的数据可以来自程序定时器 ,也可以
来自其他变换源 ,如鼠标操作或网络数据等 。该设计用程序
定时器来设置数据。
设置变量:bh[0] ;//花开
bh[ 1] ;//出水
keyn;//动画开关
在消息响应函数 OnTimer()中改变 bh[0] 、bh[ 1] 的值来
实现花开的过程。荷花开放过程中状态的变化见图 8。
图6 荷花建模效果
Fig.6 The modeling effect of water l ily
图7 经融合处理加水面的效果
Fig.7 The effect of adding water surface by
fusion process
图 8 荷花开放过程
Fig.8 The opening process of water lily
3 小结
虚拟植物对植物进行建模的目的就是使构建的模型具
有真实感 ,为植物实际培育和繁殖提供技术支持。笔者用
VC++6.0调用OpenGL实现了简单的植物器官(荷花)的虚
拟 ,根据荷花的几何形态和拓扑结构 ,模拟了荷花的整体形
态和荷花在水中缓慢绽放的过程 ,具有较强的真实感 。如果
能够加入花茎 、花蕊 、叶子 、实现花朵由小到大的渐变过程 ,
会有更好的真实感和观赏效果 ,以后可以在该方面进一步深
入研究。
参考文献
[ 1] PETER ROOM , JIM HANAN , PRZEMYSLAW PRUSINKIEWICZ.Virtual pla-
nts:New perspectives for ecologists , pathologists and agricultural scientists[ J] .
Trends in Plant Science , 1996 ,1:33-38.
[ 2] 胡海清.虚拟植物生长建模可视化技术研究[ D] .重庆:重庆大学, 2005.
[ 3] 费广正 ,芦丽丹,陈立新.可视化OpenGL程序设计[M] .北京:清华大学出版社 ,2001.
[ 4] 喻晓莉.虚拟植物生长机理模型构建技术研究[ M] .重庆:西南大学 ,
2005.
(上接第 11021页)
参考文献
[ 1] 秦大河.进入21世纪的气候变化科学———气候变化的事实、影响与对
策[ J] .科技导报, 2004(7):4-7.[ 2] 信乃诠,程延年.未来气候变化对农业的影响及对策[ J] .中国农学通
报, 1995 ,11(3):1-4.
[ 3] 蔡运龙.全球气候变化下中国农业的脆弱性与适应对策[ J] .地理学
报, 1996 ,51(3):202-211.
[ 4] 丁一汇.气候变化的事实和科学认识[ J] .气象知识 ,2003(1):8-12.
[ 5] 广东省气象局《广东省天气预报技术手册》编写组.广东省天气预报技
术手册[M] .北京:气象出版社, 2006.
[ 6] 广东省农业厅 ,广东省气象局.广东省农业气象灾害及其防灾减灾对
策[M] .北京:气象出版社 ,2000.
[ 7] 欧阳海 ,郑步忠,王雪娥 ,等.农业气候学[M] .北京:气象出版社 ,1990.
[ 8] 广州区域气象中心应用气候研究所.广东省农业气象指标汇编[M] .广
州 ,1993.
[ 9] 丁丽佳.潮州市夏季气候变化特征及其对农业生产的影响[ J] .安徽农
业科学 , 2007, 35(13):3953-3954.
[ 10] 刘学锋,李元华,秦莉.河北省近 50年最高气温及高温日数变化特征
[ J] .气象科技, 2007 ,35(1):31-35.
[ 11] 陈淡芳 ,丁丽佳,陈清辉.潮州市近年来气候变化特征及水稻生产对
策[ J] .广东气象 ,2001(4):47-48.
11056              安徽农业科学                        2008年