1 / 29

第 9 章

第 9 章. Linux 的图形编程. 本章重点. 使用 SDL 图形开发库并初始化图形模式 基本绘图函数的应用 图片与文字的显示 动画 三维绘图 用 SDL 实现简单游戏设计. 9.1 Linux 的图形编程简介. 在 Linux 图形编程中,基于控制台的图形库主要有: SVGALib : 是最早基于 Linux 的非 X 的图形支持库。 FrameBuffer :出现在 Linux 2.2.x 内核当中的一种驱动程序接口。

landon
Download Presentation

第 9 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 9 章 Linux的图形编程

  2. 本章重点 • 使用SDL图形开发库并初始化图形模式 • 基本绘图函数的应用 • 图片与文字的显示 • 动画 • 三维绘图 • 用SDL实现简单游戏设计

  3. 9.1 Linux的图形编程简介 在Linux 图形编程中,基于控制台的图形库主要有: • SVGALib: 是最早基于Linux的非X的图形支持库。 • FrameBuffer:出现在Linux 2.2.x内核当中的一种驱动程序接口。 • GGI:新一代的图形支持库。可在 FrameBuffer, SVGALib等设备上运行。在所有平台上提供了一致的输入设备接口, 采用共享库机制, 实现低层支持库的动态装载等 。 • OpenGL: 是个专业的3D程序接口,功能强大,调用方便的底层3D图形库。 • SDL:是一个跨平台的多媒体游戏支持库,包含了对图形、声音、游戏杆、线程等的支持。

  4. 9.2 安装和使用SDL图形开发库 • 系统安装时一般都已经默认安装了SDL库,如没安装,参见附录1。 • SDL的基本库与附加库的库名与含义: • 使用SDL库需要包含头文件:#include "SDL.h" • 编译命令为:gcc –I/usr/include/SDL –lSDL 源程序名 –o 目标文件名 -lpthread • 如果程序中使用了图像库和混音库,在编译的时候还需要加上相应的编译参数,分别是-lSDL_image和-lSDL_mixer。

  5. 9.3 初始化图形模式 • 初始化图形模式中常用函数及功能 : • 要加载和初始化SDL库需要调用SDL_Init()函数,该函数以一个参数来传递要激活的子系统的标记。 • SDL_Init()函数说明: • flags参数取值所对应的子系统对象 :

  6. 9.3 初始化图形模式 • 例9.1:初始化视频子系统,设置显示模式为640*480大小。设置初始颜色并对颜色值进行改变,使程序执行过程中背景色渐变。编写程序9-1.c,放在/home/cx/下。 • 源程序代码 : • 思考题: • 编写一个简单的SDL初始化程序:要求背景色为红色,让屏幕停留5秒。 • 编写一个简单的SDL初始化程序:要求背景色的红、绿、兰为随机显示值,让屏幕停留10秒。

  7. 9.4基本绘图函数的应用 • 主要应用SDL_draw函数库绘制点、线、圆等基本图形。 • 常用的基本绘图函数及功能:

  8. 9.4基本绘图函数的应用 • 例9.2:使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,用Draw_Line函数画两条交叉的直线,一条直线起始点的坐标为(240,180),终止点的坐标为(400,300),另一条直线起始点的坐标为(400,180),终止点的坐标为(240,300)。再用Draw_Pixel函数绘制一条正弦曲线。程序名为9-2.c,存放在/home/cx/SDL_draw-1.2.11下。

  9. 思考题: • 编写一个简单的画线程序:要求设置背景色为红色,线条颜色为绿色,绘制一个边长为120的正三角形,同时让屏幕停留8秒。 • 线段长度无限短后就成为点,请用画线的方法画出正弦曲线。 • 能否用画线的方法实现动画。 9.4基本绘图函数的应用 • 编辑源程序代码: [root@localhost SDL_draw-1.2.11]#gedit 9-2.c • 编译时与一般的SDL程序有所不同,分三步。 • [root@localhost SDL_draw-1.2.11]#export CFLAGS="`sdl-config --cflags` -I./include" • [root@localhost SDL_draw-1.2.11]#export LIBS="`sdl-config --libs` ./src/.libs/libSDL_draw.a" • [root@localhost SDL_draw-1.2.11]#gcc -o 9-2 9-2.c -Wall $CFLAGS $LIBS

  10. 9.4基本绘图函数的应用 • Draw_Line函数说明 • Draw_Pixel 函数说明

  11. 9.4基本绘图函数的应用 • 例9.3:使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,画5个黄色的同心圆,圆心坐标为(320,240),最小的圆半径为5,其它圆的半径以15的大小递增,程序名为9-3.c,存放在/home/cx/SDL_draw-1.2.11下。 • 编辑源程序代码:

  12. 9.4基本绘图函数的应用 • Draw_Circle函数说明 • 思考题: • 编写一个画圆的程序:要求设置背景色为黄色,线条颜色为蓝色,以正三角形的三个顶点为圆心,半径为60画三个圆,同时让屏幕停留8秒。 • 画一个半径渐渐增大,颜色随机变化的圆。 • 画一个圆,此圆沿着正弦曲线运动。

  13. 9.4基本绘图函数的应用 • 例9.4:使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,用Draw_Rect函数画2个矩形,一个矩形的左上角坐标是(80,180),宽和高分别是160和120,颜色为白色,另一个矩形的左上角坐标是(319,179),宽和高分别是242和122,颜色为黄色。用Draw_FillRect 函数画1个矩形,其左上角坐标是(320,180),宽和高分别是240和120,颜色为红色。 程序名为9-4.c,存放在/home/cx/SDL_draw-1.2.11下。

  14. 9.4基本绘图函数的应用 • 编辑源程序代码 :

  15. 9.4基本绘图函数的应用 • Draw_Rect函数说明 : 思考题:编写一个画矩形的程序:实现5个矩形从大到小向屏幕中心依次缩小,每个矩形间隔20个单位,要求最里面即最小的矩形宽、高分别为80和60,同时让屏幕停留5秒。

  16. 9.4基本绘图函数的应用 • 例9.5:使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,用Draw_HLine函数画一水平直线,起始点为(240,240),长度为160,颜色为白色;用Draw_VLine函数画一垂直直线,起始点为(320,180),长度为120,颜色为红色,用Draw_Ellipse函数画一椭圆,圆心(240,180),x轴径76,y轴径56,颜色为蓝色,用Draw_FillEllipse填充此椭圆,用Draw_Round画一圆角矩形,左上角坐标为(322,122),宽为156,高为116,圆角的半径为10,颜色为绿色,用Draw_FillRound填充此圆角矩形。

  17. 9.4基本绘图函数的应用 • 编辑源程序代码 :

  18. 9.4基本绘图函数的应用 • Draw_HLine函数说明: • Draw_VLine函数说明: • Draw_Ellipse函数说明: • Draw_Round函数说明:

  19. 9.5 图片与文字显示 • 常用的函数及功能 :

  20. 9.5 图片与文字显示 • 例9.6:设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,加载位图b.bmp,并按照一定的顺序把位图排列显示。设程序名为9-6.c,存放在/home/cx/下,位图名为b.bmp也存放在该目录下。 • 编辑源程序代码:

  21. 9.5 图片与文字显示 • SDL_LoadBMP函数说明: • SDL_BlitSurface函数说明:

  22. 9.5 图片与文字显示 • 例9.7:设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,使用SDL_ttf库在屏幕上显示“Linux下TrueType字体显示示例”,字体大小为38,颜色为红色。设程序名为9-7.c,存放在/home/cx/下。 • 准备工作:把windows下C:\WINDOWS\Fonts中的simsun.ttc文件拷贝到Linux下的/usr/share/fonts/下,用于显示中文。 • 编辑源程序代码: 注意:文件保存的时候请使用UTF8格式保存,才能正常显示中文字体。 思考题:编写一个程序,主要实现粗体,斜体,下划线等字体效果,同时让屏幕停留5秒。

  23. 9.6动画 • 动画的常用函数: • 例9.8:设计一个程序,实现矩形的运动,矩形是通过位图显示,当矩形碰到四边时,会自动反弹,按任意键退出。按程序名为9-8.c,存放在/home/cx/下,位图素材(b.bmp)也存放在该目录下。

  24. 9.6动画 • 编辑源程序代码: 思考题:编写一个程序,主要实现圆球运动效果,使用键盘事件,按下Esc键退出程序。

  25. 9.7 三维绘图 • 三维绘图的常用函数:

  26. 9.7 三维绘图 • 例9.9:设计一个程序,在屏幕上绘制一个立体矩形,并按照一定的角度和方向旋转。设程序名为9-9.c,存放在/home/cx/下。 • 编辑源程序代码: • 思考题: • 编写一个程序,实现正方体的旋转方向为顺时针,并且使得旋转的速度加快,正方体的上下面颜色为红色,左右面颜色为绿色,前后面颜色为蓝色。(小提示:旋转的速度可以根据旋转的角度值改变量来实现)。 • 把例9.9中的正方体改成三棱锥。

  27. 9.8 游戏程序入门 • 例9.10:利用SDL库,综合运用以上所学的函数及方法,实现大炮打飞机的游戏。游戏初始化的时候大炮在屏幕底部中间,从屏幕的上方不断出现飞机,保持。可以使用键盘方向键控制大炮的左右移动,→表示向右,←表示向左。使用空格键发射炮弹。飞机水平运行,并逐渐往下移动,大炮弹若是击中飞机,爆炸,系统会立即再产生飞机,保证飞机数量为2架。假设飞机下降到大炮的位置,那么大炮就被炸毁,游戏结束。程序名为9-10.c,存放在/home/cx文件下。本题中用到的素材大炮、飞机、背景图片等放在data文件夹里,data文件夹放在/home/cx文件下。

  28. 9.8 游戏程序入门 • 编辑源程序代码: • 思考题: • 改写程序9-8.c,再画一块档板,可以用“←”、“→”键移动档板,移动档板,档住方块,使得方块不会与底边相碰。当方块与档板相碰时,方块反弹,游戏继续,积分加1;当方块与底边相碰时,游戏结束,显示积分值。 • 改写程序9-10.c,改变飞机、大炮的形状与数量,其余与题9-10.c类似。

  29. 思考与实验 • 参考SDL_draw库中关于椭圆的函数介绍,画一个椭圆。 • 利用画线,画圆和画矩形,自行创意设计三者结合的图形。 • 编写一个程序,运用绘图、位图与文字显示的知识,实现看图识字的效果。 • 参考例9.10,模仿飞机打大炮的原理,实现一个军舰发射鱼雷打怪物的游戏。要求军舰在屏幕上方,向下发射鱼雷,打击不断从屏幕下方出现的怪物,如果怪物上升到和军舰相碰的时候,游戏结束。

More Related