admin管理员组文章数量:1571758
2024年5月30日发(作者:)
基于OpenGL的喷泉动画设计
胡运江 重庆大学计算机学院 400044
摘 要
随着计算机图形学的发展,OpenGL的应用已涉
及建筑、产品设计、医学等领域。本文通过
OpenGL实现喷泉三维动画。阐述了OpenGL的基
本特点、功能、设计技术和喷泉动画实现。
关键词
OpenGL; 喷泉; 动画
1、OpenGL简介
OpenGL(Open Graphics
Library),是一个三维的计算机图形和
模型库,同时也是该行业的一个标准。它
源于SGI公司为其图形工作站开发的IRIS
GL,在跨平台移植过程中发展成为
OpenGL。
就需要用到融合技术。
雾化功能:OpenGL提供了"fog"的基
本操作来达到对场景进行雾化的效果。
位图和图像功能:OpenGL提供了一
系列函数来实现位图和图像的操作。
纹理映射功能:在计算机图形学中,
把包含颜色、alpha值、亮度等数据的矩
形数组称为纹理。
动画功能: OpenGL提供了双缓存区
技术来实现动画绘制。
清理缓冲后又继续绘制下一张图片。这时
缓冲1里的图像也绘制好了,就这样两个缓
冲交换使用。由于交换的时间很短,所以在
视觉上给我们动画的效果。
5、OpenGL动画设计喷泉具体实现
(1) OpenGL动画设计喷泉的平台的选
取
该设计是运用VC++和OpenGL联合
编程实现的,其中运用VC++设计窗体,
运用OpenGL绘制喷泉和设计动画效果。
(2) OpenGL动画设计喷泉的功能结构
模块设计
OpenGL喷泉动画设计的窗体:标题
栏,工具栏,状态栏,窗体(喷泉模拟)
(3) OpenGL动画设计喷泉的实现具体
设计
①.定义一个工程文件MySDOpenGL.
dsp,这里面包括了建立喷泉动画模拟的
工程信息。
②.建立主窗体应用程序MainFrm.cpp,
同时定义MainFrm.h头文件。其中在
MainFrm.h中定义窗体的相关信息,在
MainFrm.cpp中编写执行窗体时所需要的
类。
③.建立应用程序MyFountain.cpp,同
时定义MyFountain.h头文件。在头文件
中定义的主要的是MyFountain.cpp的头文
件。在MyFountain.cpp中,定义了喷泉
相关行为动作。
④.建立应用程序MyFountainDoc.cpp,
同时定义MyFountainDoc.h头文件。头文
件定义的主要是MyFountainDoc.cpp的头
文件。在MyFountainDoc.cpp中,定义
喷泉文本相关行为动作的类。
⑤.建立主要的应用程序
MyFountainView.cpp,同时定义
MyFountainView.h头文件。在头文件中定
义的主要的是MyFountainDoc.cpp的包含
文件信息。在MyFountainView.cpp中完
成OpenGL的主要的操作,包括:场景的绘
制与渲染(初始化OpenGL和设置定时器,
删除调色板和渲染上下文,设置调色板,初
始化OpenGL场景,)绘制喷泉,喷泉的初
始化,纹理的装入,添加,删除粒子,运动
的设计,旋转的设计等等。
⑥.添加MyTexture.h和MyTexture.
cpp。其中MyTexture.cpp定义相关的类。
⑦.添加StdAfx.h, StdAfx.cpp。用
StdAfx.h来定义系统相关的包括文件。
StdAfx.cpp来运用相关的系统资源。例
如:MyFountain.pch和StdAfx.obj。
3、OpenGL动画设计技术基础
(1) OpenGL函数
OpenGL的库函数六类:OpenGL核
心库,OpenGL实用库,OpenGL辅助
库,OpenGL工具库,Windows专用库,
Win32 API函数库。
(2) OpenGL模型的绘制
每组三维物体包括两种形式:网状体
(wire)和实心体(solid)。
(3) OpenGL图形变换流程
世界坐标三维物体—几何变换—投影
—三维剪裁—视口变换—图形显示
(4) OpenGL效果处理
OpenGL的三个特殊效果处理:融
合、雾化和反走样
2、OpenGL的特点和功能
(1) OpenGL的特点
工业标准:
OARB(OpenGL Architecture Review
Board)联合会领导OpenGL技术规范的发
展,OpenGL有广泛的支持,它是业界唯一
的真正开发的、跨平台的图形标准。
可靠度高:利用OpenGL技术开发的
应用图形软件与硬件无关,只需硬件支持
OpenGL API标准。
可扩展性:OpenGL是低级的图形
API,它具有充分的可扩展性。
可伸缩性:基于OpenGL API的图形
应用程序可以运行在许多系统上,包括各
种用户电子设备、PC、工作站以及超级计
算机。
灵活性:OpenGL功能可由硬件实现,
也可软件实现,或者以软硬件结合的方式
实现。
(2) OpenGL的功能
绘制物体功能:OpenGL提供了丰富
的基本图元绘制命令,可以方便地绘制物
体。
变换变换:OpenGL提供了一系列基
本的变换,如取景变换、模型变换、投
影变换及视口变换。
光照处理功能:绘制有真实感的三维
物体必须做光照处理。
着色功能:OpenGL提供了两种物体
着色模:RGBA颜色模式和颜色索引模
式。
反走样功能:为了消除这种缺陷,
OpenGL提供了点、线、多边形的反走样技
术。
融合功能:为使物体具有真实感觉,
4、OpenGL动画设计喷泉原理
(1) 动画设计的原理
OpenGL提供了双缓存来制作动画。
即在显示前台缓存内容中的一帧画面时,
后台缓存正在绘制下一帧画面,当绘制完
毕,则后台缓存内容便在屏幕上显示出来,
而前台正好相反,又在绘制下一帧画面内
容。这样循环反复,屏幕上显示的总是已经
画好的图形,所以图片都是连续的。
在OpenGL中,设计这样的动画程序
需要掌握一个重点函数,即:void
auxSwapBuffers(void);
设置交换缓存。即执行完一次绘制过
程,便交换前后台缓存,以便让下一帧图
形在屏幕后绘制完成。当然,使用不同的
窗口系统设置交换缓存的函数也可能不一
样,比如在X窗口系统下,就最好用
glxSwapBufferS()。
此外,在窗口显示模式中还应设置双
缓存模式。
(2) OpenGL喷泉动画设计原理
利用粒子模型绘制水滴,通过对粒子
设置方向矢量。在T1时刻,在缓冲1正
在绘制(x1,y1,z1)的图像,在T2时刻,
在缓冲2已经绘制完(x2,y2,z2),绘制
完后就把缓冲2的内容送到屏幕上显示,
-113-
信息科技
中国科技信息2009年第12期 CHINA SCIENCE AND TECHNOLOGY INFORMATION Jun.2009
⑧.res\MyFountain.ico包含icon文
件。res\MyFountain.rc2是资源文件不可
以被vc++编辑。res\Toolbar.bmp是工具
条上的图标。
1.喷泉的绘制
DrawFountain();
glBindTexture(GL_TEXTURE_2D,
texture[2]); // 装如纹理
glPushMatrix(); //压入当前堆栈;
glRotatef(a, 0, -1, 0); //用旋转矩阵
乘以单前矩阵,围绕原点与(x,y,z)旋
转a
glBegin(GL_QUADS);//绘制粒子
glTexCoord2f(0, 0); glVertex3f(-100,
0, -100); //绘制粒子纹理坐标。
glTexCoord2f(1, 0); glVertex3f(-100,
0, 100);
glTexCoord2f(1, 1); glVertex3f(100,
0, 100);
glTexCoord2f(0, 1); glVertex3f(100,
0, -100);
glEnd();
glPopMatrix(); //弹出当前堆栈;
glFlush();
2.添加新的粒子
void CMyFountainView::
AddParticles()
{struct particle *tempp;
int i, j;
for (j=0; j<3; j++)
for (i=0; i<2; i++)
{tempp = (struct particle *)malloc
(sizeof(struct particle)); //申请空间
if (fn[j]) fn[j]->prev = tempp; //给
变化的粒子赋值
tempp->next=fn[j]; //使之具有连续
性
fn[j] = tempp;
tempp->t = -9.9; //设置粒子的生
命周期
tempp->v = (float)(rand() % 200000)/
100000+1; //粒子速度
tempp->d = (float)(rand() % 400)/
100-2; //粒子方向
tempp->x= 0;
tempp->y= 0;
tempp->z= 0;
tempp->xd=cos((tempp->d*3.14159)/
180)*tempp->v/4;
tempp->zd=sin((tempp->d*3.14159)/
180)*tempp->v;
tempp->type = 0; //粒子状态为运
动
tempp->a = 1; //粒子淡化
}
}
}
3.粒子运动函数(在x , y , z各
自的运动方向)
void CMyFountainView::
MoveParticles()
{struct particle *tempp;
int j;
for (j=0; j<3; j++)
{tempp = fn[j];
while (tempp)
{if (tempp->type == 0) // 如果粒
子处于运动状态
{tempp->x += tempp->xd; //
在x,z方向作匀速运动
tempp->z += tempp->zd;
tempp->y = -(9.8*(tempp->
t*tempp->t/4))/2+122.5; // 计算粒子的
高度 H = gt^2/2
tempp->t += 0.1; // 增加粒子寿命
if (tempp->y < 0) tempp->type = 1;
// 如果粒子位于地面
}else // 粒子高于地面
{tempp->y = -(9.8*(tempp->
t*tempp->t/4))/2+122.5; // 计算粒子高
度
tempp->a -= 0.1; // 粒子淡化
}
tempp = tempp->next; // 下一个
粒子
}
}
}
上接第110页
模拟结果如图5所示,在该模拟过程
中共发生了两次DDoS攻击。第一次在15
至20秒之间,第二次在35至40秒之间。
从图中可看出:当没有部署DDoS防御机
制时,受害者收到数据包数目在10000左
右;而部署本文提出的确定性包标记防御
机制,受害者收到数据包数目仅在2000到
3000之间。由此可知,本文提出的防御
机制能有效地抵御DDoS攻击和减轻DDoS
攻击对受害者的影响。
5、结论
由于文中所提出的算法通过重载IP包
头偏移域和服务类型来获得更多的标记空
间,解决了普通路径识别方法标记空间不
足问题,由于它在每个数据包中都存储了
源AS编号,受害者可实时追踪到攻击源
所在的AS。它不管是对BGP路由器标记
过程还是对受害者过滤攻击包来说都是一
种极其轻量级的方法。
6、OpenGL动画设计喷泉测试
在设计喷泉的过程中,我进行了简单
窗体的测试和喷泉动画效果的测试。
参考文献
[1] 和平鸽工作室.OpenGL高级编程与可视
化系统开发(高级编程篇)[M].北京:中
国水利出版社,2002
[2] 吴斌等.OpenGL编程权威指南第三版[M].
北京:中国水利出版社.2001.8
[3] 陈岩涛.OpenGL图形程序设计指南[M].北
京:中国水利出版社.2001.10
参考文献
[1] Abraham Yaar, Adrian Perrig and Dawn
Song. “Pi: A Path Identification Mechanism to
Defend against DDoS Attacks”, Proceedings of
Symposium on Security and Privacy, Page(s):
93-107, 2003.
[2] Changhyun Beak, Junaid Ahsenali Chaudhry,
Keonsoo Lee, Seungkyu Park and Minkoo Kim.
“A Novel Packet Marketing Method in DDoS
Attack Detection”, American Journal of Applied
Sciences 4 (10): 741-745, 2007.
作者简介
张国锋,男,大学学历,现在淮南矿业集团
瓦斯利用分公司,从事计算机网络管理和计
算机工业控制系统管理工作。
-114-
版权声明:本文标题:基于OpenGL的喷泉动画设计 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1717036906a529544.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论