OPENGL动画
机械设计制造及自动化毕业设计_基于OpenGL的机器人三维仿真环境设计

SHANGHAI UNIVERSITY毕业设计(论文)UNDERGRADUATE PROJECT (THESIS)题目:基于OpenGL的机器人三维仿真环境设计学院: 机电工程与自动化学院专业: 机械工程及自动化学号:学生姓名:指导教师:起讫日期:目录摘要:-----------------------------------------------------------------------------------------------------1 ABSTRACT-------------------------------------------------------------------------------------------------1 1第一章绪论------------------------------------------------------------------------------------------4 2第二章基于OpenGL的三维仿真图形设计---------------------------------------------------8 3第三章仿人机器人的三维建模-----------------------------------------------------------------19 4第四章仿人机器人运动学仿真-----------------------------------------------------------------29 5第五章总结-----------------------------------------------------------------------------------------466 致谢---------------------------------------------------------------------------------------------------477 参考文献---------------------------------------------------------------------------------------------48基于OpenGL的机器人三维仿真环境设计摘要仿真技术是机器人研究领域中的一个重要部分,随着机器人研究的不断深入,机器人仿真系统作为机器人设计和研究过程中安全可靠灵活方便的工具,发挥着越来越重要的作用。
OpenGL在卫星运动三维仿真中的应用

是不变的 ,在本体坐标系中绘 图显然 比在轨道坐标系中要方便得多 。
Opn eGL提供 了 gu ok lL oAt( )函数 ,它 用 来 设 置 相机 如 何 在 三 维 场 景 中摆 放 。通 过 调 整 该 函数 的参 数 ,仿真 平 台实现 了三 维场 景 漫游 和运 动物 体 的跟 随观 察功 能 ,用 户可 以 自行
编程方式具有实 时性 可移植性 、数据驱动性 、功能强大、接 口齐全等优点 ,能够满足仿真
平 介 及 对 仿 真 平 台 的 支持
3 1 Op n L矩 阵变换 和 视角 选择 . eG
Opn eGL中用模 型视 图矩 阵来 表 征 三 维 物 体 的 当前 位 置 ,可 以 对 这 种 矩 阵 进 行 三种 变
维普资讯
4 4
控 制 工 程
Opn eGL与 VC的紧 密结合 ,编 程人 员 一方 面可 以使用 VC的强大 功能 来 进行诸 如 界面 定制 、
接 口设计 等 工作 ,另 一方 面 可 以用 强 大 的 Opn L 函数 库 来 绘 制 三 维 动 画 。VC+O e G eG pn L
换 : loa 、g r s t、g cl g t e l a le l a ,它们分别代表对物体进行旋转 、平移 、放大操作。调用 R t T na S e
这些 函数 会 引起模 型 视图矩 阵 的变 化 ,从 而改 变三 维物 体 的位置 。基 于 通讯 卫 星平 台的卫 星 主 要 由主体 和太 阳翼 组成 ,它 的 主体在 卫 星本 体 坐标系 中是 不 动的 ,在 轨道 坐标 系中是 变化 的 。要在 轨 道坐标 系中绘制 卫 星 主体 并 不用 计算 出卫 星 主体 各个 顶 点 在 轨 道 坐 标 系 的位 置 , 可 以先 用模 型 变换 函数将 当前 位 置 由轨 道 坐标 系转 化 到卫 星本体 坐 标 系 中 ,然 后 直接调 用在 本 体坐 标 系 中的绘 图 函数 在 当前 坐标 系绘 制 出卫 星 。由于卫 星 主体 各个 顶 点在 本体 坐标 系 中
Photoshop CS4 中的 GPU 和 OpenGL 功能及限制

Windows 支持 Vista 64
虽然 Photoshop CS4 可能可以在 Windows XP 64 位版本上正常工作, 但是我们并不是官方支持 Windows XP 64 位版本, 因为我们没有对它进全面的测试。因为它没有经过全面测试, 在 Windows XP 64 位版本上, 默认会禁用 OpenGL 设置。如果要启用 OpenGL 功能, 可以运行 Windows AllowOldGPUs_ON 注册表脚本以强制打开 OpenGL 功能 (如果您的显卡支持这些功能的话)。但是, XP 64 使用此注册表脚本时, 风险自负。有关该增效工具的详细信息, 请参阅“Crashes occur, Photoshop CS4 won't open, or some features are slow and OpenGL is unavailable”(TechNote kb405064*)。 注意, 尽管我们为您提供此注册表脚本, 但并不建议您使用它, 也不支持该注册表脚本。
1. 右键单击桌面, 并选择“属性”。 2. 选择“设置”和“高级设置”。 3. 根据您的图形显卡, 会显示不同的选项卡。选择“配适器”>“属性”, 以查看包含显卡内存量在内的显卡数
据。选择“驱动程序”, 查看驱动程序的详细信息, 包括驱动程序版本。
Windows Vista 中:
1. 右键单击桌面, 并选择“个性化”。 2. 选择“显示设置”>“高级设置”。“配适器”选项卡显示显卡数据, 其中包括显卡内存量。 3. 选择“属性”>“驱动程序”以获得驱动程序版本。
如果要使用任何测试版软件, 包括显示器驱动程序, 则应该在安装测试版驱动程序或应用程序之前, 在操作系统中 设置一个还原点。通常, 您只需要卸载测试版驱动程序或应用程序, 就可以恢复到先前的状态, 或复原旧版驱动程 序, 但还是建议您设置还原点, 以免丢失工作内容或浪费时间。
利用OpenGL实现常用机构的三维运动仿真

利 用 Op n e GL 实 现 常 用 构 的 三 维 运 动 仿 真 机
李 素 有 ,侯 宇 ,孙 智 民
( 北 工 业 太 学 ,陕 西 西 安 7 07 ) 西 10 2
验 获得 的大 量 数 据 按 照 其 自身 的 物 理 背 景 进 行 有 机 的
录卅 面 问 对 象 ( bet r ne ) i O lc oi td 的编 程 技 术 , 用 Mi sf e 选 c ot o r
摘
要 :介 绍 了在 Widw x N n o s / T环 境 下 , 过 Vsa +调 用 O e G 9 通 i l u C十 p n L图形 库 中 的 函 数 开发 具 有 真 实 感 的 常 用机 构 的 三 雄 图 像 运 动仿 真 的 方 法 =根 据 常 用机 构 几 何 参 数 建 立 数 学模 型后 , 算进 行 参 数 化 三 对
^ P 耙c 埘 , 【 … , ’ 5 - 7 0 7 ( Ⅱ ⅡⅡ 1 0 2 m ,
Absr c Thsp e  ̄r u e h meh 0d v l te3) ga h e tlt ss uatn o o t o me h ns b s lC + + t a t: i 印 cite c st d e te L e e ̄ h 1  ̄ p ia ahei q lt fc Rl n d l c u o  ̄ c a im y Viua
c l t f t n p n n e ee vltn ̄ f n o s x N 3 a a l em d l go  ̄ m n nme h ns a 4d o t ln a i h u c o si o e Glu d r h n j u e t d w / T D p rme i o ei f2 lo c a im i c n e u i n f o o Wi 9 I n o s at u d n mte aJs m d 1 a c r ig 1 c a i t cu p rm tr 、aa 3  ̄h as mo e f r i ig n h t t o e c od n o me h n s s u t ̄ aa ees , D m ebl o c 1 m r , l ai m d l t ra 日 t 删e s i h e le l v s s
三维空间中的分形

3
OpenGL的基本功能 OpenGL的基本功能
2. 变换 . OpenGL 提 供 了 一 系 列 基本的变换, 如取景变换、 基本的变换 , 如取景变换 、 模型变换、 模型变换 、 投影变换及视 口变换。 口变换。
参考书:《分形算法与程序设计》
4
OpenGL的基本功能 OpenGL的基本功能
⑵ 改变材质 中提供了两种方式来改变场景中的材质。 在OpenGL中提供了两种方式来改变场景中的材质。 中提供了两种方式来改变场景中的材质 第一种方法是利用函数glMaterial*()来改变材质,但是调用函 来改变材质, 第一种方法是利用函数 来改变材质 数 glMaterial*() 需 要 同 时 保 存 当 前 矩 阵 , 也 就 是 调 用 函 数 glPushMatrix()和glPopMatrix()。 和 。 第二种方法是使用函数glColorMaterial(),其形式为: 第二种方法是使用函数 ,其形式为: void glColorMaterial(GLenum face,GLenum mode);
参考书:《分形算法与程序设计》 17
OpenGL的基本函数 OpenGL的基本函数
6.明暗处理 . 在OpenGL中,用单一颜色处理的称为平面明暗处理 中 用单一颜色处理的称为平面明暗处理(Flat Shading) , 用 许 多 不 同 颜 色 处 理 的 称 为 光 滑 明 暗 处 理 (Smooth Shading) 。 设置明暗处理模式的函数为: 设置明暗处理模式的函数为: void glShadeModel(GLenum mode);
12
OpenGL的基本函数 OpenGL的基本函数
1.顶点坐标 . OpenGL采用有序排列的顶点集合来构造几何图元, OpenGL采用有序排列的顶点集合来构造几何图元,而不是 采用有序排列的顶点集合来构造几何图元 将线段、多边形组合起来构造几何图元。 将线段、多边形组合起来构造几何图元。 如: glVertex2s(2,5); //整数定义的二维坐标 glVertex3f(2,5,7); //浮点定义的三维坐标
OpenGL入门教程(精)

OpenGL 入门教程1.第一课:说起编程作图,大概还有很多人想起TC 的#include < graphics.h>吧?但是各位是否想过,那些画面绚丽的PC 游戏是如何编写出来的?就靠TC 那可怜的640*480 分辨率、16 色来做吗?显然是不行的。
本帖的目的是让大家放弃TC 的老旧图形接口,让大家接触一些新事物。
OpenGL 作为当前主流的图形API 之一,它在一些场合具有比DirectX 更优越的特性。
1、与C 语言紧密结合。
OpenGL 命令最初就是用C 语言函数来进行描述的,对于学习过C 语言的人来讲,OpenGL 是容易理解和学习的。
如果你曾经接触过TC 的graphics.h,你会发现,使用OpenGL 作图甚至比TC 更加简单。
2、强大的可移植性。
微软的Direct3D 虽然也是十分优秀的图形API,但它只用于Windows 系统(现在还要加上一个XBOX 游戏机)。
而OpenGL 不仅用于Windows,还可以用于Unix/Linux 等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。
并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。
3、高性能的图形渲染。
OpenGL 是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL 提供强力支持,激烈的竞争中使得OpenGL 性能一直领先。
总之,OpenGL 是一个很NB 的图形软件接口。
至于究竟有多NB,去看看DOOM 3 和QUAKE4 等专业游戏就知道了。
OpenGL 官方网站(英文)下面我将对Windows 下的OpenGL 编程进行简单介绍。
学习OpenGL 前的准备工作第一步,选择一个编译环境现在Windows 系统的主流编译环境有V isual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL 的。
但这里我们选择V isual Studio 2005 作为学习OpenGL 的环境。
基于OpenGL的某航行体水下运动可视化仿真

第 8卷
第 1期 O
20 0 8年 5月
科
学
技
术
与
工
程
⑥
Vo . No 1 !8 .0
Ma 0 y 2 08
17 —89 20 )0 28 —5 6 11 1 (0 8 1—54 0
S inc c noo y a gn e i c e eTe h lg nd En ie rng
关键词
O eG pn L
水弹道
三维建模 文献标志码
可视 体 在 海 试过 程 中 内测 系 统 记 录 了大 量 的 数据 , 括 航 行 体 在 水 中 航 行 的 姿 态 、 速 度 、 包 加 温 度、 压力 、 动 、 击 等 近 十类 , 成 的 数 据 量 非 常 振 冲 形 庞大 , 只有 专 业 人 员 花 费 大 量 的 时 问 进行 分 析 后 , 才能 明 白航 行 体 航 行 的情 况 。随 着 可 视 化 技 术 的
快设计 出三维 图形 。 由于 O eG pn L提供 了一种 直 观 的编程 环 境 以 及 一 系 列 的 函 数 ( 维 图形 单 元 函 1 二 _
般都 是二维 的 , 有部 分 j维 的 ,但运 动 体 的几 何 也
造 型较简单 , 缺乏 实 际过程 的环 境 渲染 , 能 真 实 不
系统 、 放式 的 j 维 图 形 标 准 。O eG 开 三 p n L作 为 一 种
20 0 8年 1月 2 8日收 到
这 样 预编泽头 文件 才能提 供对 O e G p n L库和用
户库 的支持 。还必须 在 Po c 菜单下 的 S tn s r et j e ig 项 t
中 对 Ln 选 项 卡 内链 接 以 下 库 :g 3 .i oe — i k l 2 1 pn u b
OpenGL入门教程(精)

4、把解压得到的 glut.dll 和 glut32.dll 放到操作系统目录下面的 system32 文件夹内。(典型的位置为: C:\Windows\Sy st em32) 第三步,建立一个 OpenGL 工程 这里以 VisualStudio2005 为例。 选择 File->New->Project,然后选择 Win32 Console Application,选择一个名字,然后按 OK。 在谈出的对话框左边点 Application Settings,找到 Empty project 并勾上,选择 Finish。 然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c 来作为文件结尾。 搞定了,就跟平时的工程没什么两样的。 第一个 OpenGL 程序
在 glutDisplayFunc 函数中,我们设置了“当需要画图时,请调用 myDisplay 函数”。于是 myDisplay 函数就 用来画图。观察 myDisplay 中的三个函数调用,发现它们都以 gl 开头。这种以 gl 开头的函数都是 OpenGL 的标准函数,下面对用到的函数进行介绍。 1、glClear,清除。GL_COLOR_BUFFER_BIT 表示清除颜色,glClear 函数还可以清除其它的东西,但这里 不作介绍。 2、glR ect f,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。 3、glFlush,保证前面的 OpenGL 命令立即执行(而不是让它们在缓冲区中等待)。其作用跟 fflush(stdout) 类似。
OpenGL 入门教程
1.第一课:
说起编程作图,大概还有很多人想起 TC 的#include < graphics.h>吧? 但是各位是否想过,那些画面绚丽的 PC 游戏是如何编写出来的?就靠 TC 那可怜的 640*480 分辨率、16 色来做吗?显然是不行的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 1 计算机图形学实验报告 OpenGL 图形显示综合作业 一、实验目的与要求: 1.OpenGL在MFC环境下运行和图形显示; 2.建立基本的几何模型 3.光源和材料颜色设定,显示出光照效果。 4.作业要包含一个简单的动画。
二、实验原理 1、本次作业建立的几何模型描述如下:首先绘制一张桌子,然后在桌面上绘制一个小球和一个箱子,小球在平面的右端,箱子在平面的中心位置。
2、动画设计如下:用小球来撞击箱子,通过多次撞击把箱子撞到桌面下方。 3、作业中用到了图形学的知识,比如创建纹理,灯光和材料的设置,视点的设置等。
三、算法设计 1、参数说明: dz:球心的z坐标 deltaZ:球走过的路程 ball_v:球的速度 deltaZ_Box:箱子z坐标 box_v:箱子的速度 box_v_drop:箱子下落速度 deltaZ_Box_Drop:箱子下落距离 2 2 2、函数说明: void MyLight()//灯光设置 void DrawSphere() //绘制球 void DrawBox() //绘制箱子 void Display() //显示图形 void IdleFunction() //发生碰撞后箱子和球的运动
四、关键程序代码 1、void Display() { MyLight(); glClearColor(0,0,0,0); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(12,15,4,0,0,0,0,1,0); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,texture[0]); glBegin(GL_QUADS); glColor3f(0,1.0,1.0); glTexCoord2f(0.0f,1.0f);glVertex3f(-6.0f,0.0f,-6.0f); glTexCoord2f(0.0f,0.0f);glVertex3f(-6.0f,0.0f,6.0f); glTexCoord2f(1.0f,0.0f);glVertex3f(6.0f,0.0f,6.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 6.0f, 0.0f,-6.0f); glEnd();
glPushMatrix(); glTranslatef(0,-1,0); auxSolidCylinder(1 ,20); glPopMatrix(); glFlush();
DrawSphere(); DrawBox(); SwapBuffers(m_pDC->GetSafeHdc()); } 3 3 2、void MyLight() { //灯光 GLfloat ambient[]={0.4f, 0.4f, 0.4f, 0.4f}; GLfloat diffuse[]={1.0f, 1.0f, 1.0f, 1.0f }; GLfloat position[]={6,8,10,0}; glLightfv(GL_LIGHT0,GL_AMBIENT,ambient); //指定环境RGBA强度的光 glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse); //指定光的漫射RGBA强度 glLightfv(GL_LIGHT0,GL_POSITION,position); //光源位置
glEnable(GL_LIGHTING); //启用灯源 glEnable(GL_LIGHT0); //启用0号灯
glEnable(GL_DEPTH_TEST); //启用深度测试。根据坐标的远近自动隐藏被遮住的图形 glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); glDepthFunc(GL_LESS); }
3、void IdleFunction() { dz+=ball_v; deltaZ=dz-BALL_START; //球走过的路程 degree=deltaZ*360/(RADIUM*2*PI);
//发生碰撞 if (dz+RADIUM>deltaZ_Box-EDGE/(GLfloat)2) { box_v=BOX_V; ball_v=BALL_V_NEW; bCrash=true; } 4 4 if (box_v!=0) { deltaZ_Box+=box_v; //箱子z坐标 box_v-=BOX_V_DELTA; //箱子速度 if (box_v<=0) { box_v=0; } }
if (true==bCrash) { ball_v+=BALL_V_DELTA; if (ball_v>=0) { ball_v=0; } } //下落 if (deltaZ_Box>=6) { bDrop=true; } if (true==bCrash&&box_v==0&&false==bDrop) { bCrash=false; bDrop=false; bStart=false; deltaZ=BALL_START; ball_v=BALL_V;
} }
4、void DrawSphere() 5 5 { GLfloat mat_ambient[]={0.8f,0.8f,0.2f,1.0f}; GLfloat mat_diffuse[]={0.1f,0.5f,0.8f,1.0f}; GLfloat mat_specularp[]={1,1,1,1};
glPushMatrix(); glColor3f(1.0,1.0,1.0); glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); //材质的环境颜色 glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); //材质的散射颜色 glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specularp); //材质的镜面反射颜色 glMaterialf(GL_FRONT,GL_SHININESS,100); //镜面反射指数
glTranslatef(0,(GLfloat)RADIUM,0); //向上平移 glTranslatef(0,0,dz); glRotatef(degree,1,0,0); auxSolidSphere(RADIUM); glPopMatrix();
} //绘制箱子 5、void DrawBox() { //是否在下落 glColor3f(0.6,0.6,0.1); GLfloat mat_ambient[]={0.8,0.8,0.2,1}; GLfloat mat_diffuse[]={0.1,0.5,0.8,1}; GLfloat mat_specularp[]={1,1,1,1}; glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); //材质的环境颜色 6 6 glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); //材质的散射颜色 glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specularp); //材质的镜面反射颜色 glMaterialf(GL_FRONT,GL_SHININESS,50); //镜面反射指数
if (bDrop==false) { glPushMatrix();
glTranslatef(0,EDGE/(GLfloat)2,deltaZ_Box); auxSolidBox( EDGE,EDGE,EDGE); glPopMatrix(); } else { glPushMatrix(); degreeBox+=BOX_DEGREE_DELTA; box_v_drop-=BOX_V_DROP_DELTA; //下落速度 deltaZ_Box_Drop+=box_v_drop; glTranslatef(0,EDGE/(GLfloat)2+deltaZ_Box_Drop,deltaZ_Box); glRotatef(degreeBox,1,0,0); auxSolidBox( EDGE,EDGE,EDGE); glPopMatrix(); }
} 五、程序运行结果分析 功能:演示碰撞过程。 使用说明:运行程序,点左键可以使球撞击箱子,待球与箱子都停止后,再点左键可以再次撞击,这样撞击四次,立方体从桌面上掉下去。点右键可以使球与箱子恢复各自初始的位置。