Download presentation
Presentation is loading. Please wait.
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 初始化图形模式 初始化图形模式中常用函数及功能 :
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 下。
9
9.4基本绘图函数的应用 编辑源程序代码: 编译时与一般的SDL程序有所不同,分三步。 思考题:
编写一个简单的画线程序:要求设置背景色为红色,线条颜色为绿色,绘制一个边长为120的正三角形,同时让屏幕停留8秒。 线段长度无限短后就成为点,请用画线的方法画出正弦曲线。 能否用画线的方法实现动画。 9.4基本绘图函数的应用 编辑源程序代码: SDL_draw ]#gedit 9-2.c 编译时与一般的SDL程序有所不同,分三步。 SDL_draw ]#export CFLAGS="`sdl-config --cflags` -I./include" SDL_draw ]#export LIBS="`sdl-config --libs` ./src/.libs/libSDL_draw.a" SDL_draw ]#gcc -o 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 下。 编辑源程序代码:
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 下。
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
注意:文件保存的时候请使用UTF8格式保存,才能正常显示中文字体。
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,模仿飞机打大炮的原理,实现一个军舰发射鱼雷打怪物的游戏。要求军舰在屏幕上方,向下发射鱼雷,打击不断从屏幕下方出现的怪物,如果怪物上升到和军舰相碰的时候,游戏结束。
Similar presentations