第 10 章 Linux的图形编程.

Slides:



Advertisements
Similar presentations
陳旺全醫師主講 健康養生茶飲 明目菊花茶 明目菊花茶 成分:菊花五錢、 500c.c 熱水沖泡 成分:菊花五錢、 500c.c 熱水沖泡 功效:可治療急慢性結膜炎、頭暈 功效:可治療急慢性結膜炎、頭暈 頭痛、口苦、口乾、高血壓 頭痛、口苦、口乾、高血壓.
Advertisements

六大類食物 五穀根莖類 六大類食物 油脂類 蛋魚肉豆類 奶類 蔬菜類 水果類. 五穀根莖類 : 提供熱量 : 部份蛋白質,維生素,礦物質,及膳食纖維 包含麵 ( 及麵包饅頭 ) ,飯類,蕃薯等食物 也就是一般所稱的 " 主食 " ( 蘿蔔不是這一類,是屬於蔬菜類喔! ) 飲食建議吃三到六碗 並推薦攝取全穀類食品.
正確睡午睡精神更好 正確睡午睡 精神更好 可降血壓 增加思考能力 懶懶的冬天加 上星期一又是假日後上班,如果能夠在 中午補個眠,稍微休息一下,對於精神 的提振及下午工作效率都有幫助。但冬 天睡午覺要注意保暖以及水分的補充, 避免受涼或是血液循環不好,造成手或 腿麻痛,注意這些小地方可以讓睡午睡 更健康!
揮別電腦族疲勞症候群 主講人 : 陳潮宗 中醫師. 常有症狀一 起因&症狀: 起因&症狀: 坐姿不正最易引起腰酸背痛、 過度看螢幕則眼睛疲勞酸痛。 治療重點: 治療重點:補固腰腎、明目保睛。
引言 高血壓自我健康管理包含飲食、 運動、 及健康生活型態三大方向。 飲食 是改善高血壓的重要部分, 並提 供飲食方式來改善高血壓。
人事室專題計畫業務報告 人事室 謝明峯 轉 一、專任助理注意事項 計畫案如有聘任專任助理者, 請依據「南 華大學專案助理報到程序單」內容, 將資 料繳交至人事室 ( 請於聘任到職日前繳交, 以免影響到本身權利 ) 。 離職儲金或勞工退休金 依勞工退休金條例相關規定,
山伯與英台在健康書院修業完 成後,一行人逗陣開開心心的 回自己的家鄉 …… 於是開啟了另一段 ~ 新梁祝的故事 ~ 在下 梁山伯 小女子 祝英台 我是 阿成 我是 阿香.
糖尿病的饮食控制 厦门长庚医院张翼翔. 糖尿病 糖尿病的发病率逐年增高 糖尿病的发病率逐年增高 糖尿病对健康和生命的危害 糖尿病对健康和生命的危害 心、脑、肾、神经等 心、脑、肾、神经等 糖尿病的表现和诊断 糖尿病的表现和诊断 糖尿病的治疗 — 终身治疗 糖尿病的治疗 — 终身治疗.
第八章 膳食與營養 第一節 均衡營養與膳食 年 7 月公布新版「每日飲食指南」, 依食物營養特性,分為六大類: 全榖根莖類 蔬菜類水果類 低脂乳品類 油脂與堅果種子類 豆魚肉蛋類 食全十美.
中醫臨床常見養生藥膳 臺 北 市 立 聯 合 醫 院中醫院區 院長 鄭振鴻. 壹、前言 在臺灣地處亞熱帶的氣候,冬季溫暖,夏 季炎熱,雨量多的特性。吃補的概念源自 中國大陸,但生活習性與食物亦有其地域 性,因此針對臺灣常用藥膳的食物與藥物 的性能作用,解析其效用、功能,了解食 物與人的關係,利用食物特性,藥物的效.
青春期 女生可以早在八、九歲, 或晚到十三、四歲才進入 青春期。 男生早的在十、十一歲, 晚到十四、五歲,甚至更 遲才進入青春期。
高職生的早餐飲食習慣之研究 以市立士林高商為例 二年九班 李婷葦 二年九班 卓佳惠 二年九班 郭胤彣 關鍵字:早餐. 飲食習慣. 士林高商.
第八課 路 *課前預習 一 二 三 *題解 *作者介紹 *課文內容 一 、 、 、 *修辭回顧
請愛惜自己 衛生署日前公佈了去年國人的十大 死因統計,惡性腫瘤(癌症)又第 二十度蟬聯冠軍,而且是每四名死 亡人口中,就有一人「因癌而」,
E時代盛宴 健康123年菜發表會 新春新氣象,處於資訊蓬勃E時代的您,是否已構思好如何為自己及家人準備一桌健康、豐盛的年菜?隨著國人健康意識的提升,對年菜訴求也有別於傳統年菜四大特點-高油、高鹽、高糖、低纖,加上其繁瑣的製備過程,對講求速度及效率的E時代族群而言,已不符現今年菜簡單製備、健康需求性。在這距離農曆春節只剩短短二個星期,豐原醫院營養室關心您的健康、滿足您的胃蕾,推出「E時代盛宴-健康123-年菜發表會」,以「一高、二少、三低」的健康原則,利用家中減少烹調油量的鍋具,如:烤箱、電鍋、不沾鍋等,製
生活常規.
雅樂舞基本動作與身體探索 陳玉秀老師主授 【本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣3.0版授權釋出】
嘴破怎麼辦? 嘴角或嘴唇內常常破一小傷口的人, 吃東西時真是痛苦萬分; 有的人試著補充維他命C及B群,
電腦硬體裝修丙級 ----安裝微軟windows作業系統----
关于市场营销的分析 ——以九阳豆浆机为例 品牌经营——让每一个家庭都拥有一台九阳豆浆机 营销管理——采取文化、概念、网络等营销组合
肺臟的藥膳介紹 台中慈濟醫院 中醫部 陳建仲.
位置的表示方法.
說明完後將會有一個小測驗歐! 要認真聽歐!
合理水價之探討 台灣省自來水公司前財務處經理 王禮忠 台灣省自來水公司財務處組長 賴祐.
口腔衛生保健 主講者:興中國小 護理師:莊靜華.
花孃心語.
水 生命之源 威海文登中心医院 王倩倩.
認識大腸直腸癌 大腸直腸外科 李元魁醫師.
芳香小物.
健康飲食觀 主講人:蘇麗棗.
兔 子.
健康選擇飲品 營養師 顏妤蓉 2017/3/13.
請愛惜自己 衛生署日前公佈了去年國人的十大 死因統計,惡性腫瘤(癌症)又第 二十度蟬聯冠軍,而且是每四名死 亡人口中,就有一人「因癌而」,
節能減碳—兒童廢物利用 遊戲闖關活動 設計者—賴姿良 陳俐諭 陳松吉.
健康選擇飲品 洪菱窕 營養師 2017/3/15.
牙齒保健常識 胖福2050/12.
香港普通話研習社科技創意小學 周順強老師.
第1课 欧洲的君主专制 香山中学 聂渭清.
農委會及其他計畫 執行應注意事項 第四組 涂怡禎 日期:104年10月5、6日.
膀胱過動症 & 間質性膀胱炎 台中榮總/埔里分院 蔡青倍.
嘴破怎麼辦? 嘴角或嘴唇內常常破一小傷口的人, 吃東西時真是痛苦萬分; 有的人試著補充維他命C及B群, 有的人塗抹進口藥膏,
小組成員:洪偉凱 簡子昀 李佳旻 陳泓憲.
授课教师简历 刘付才,男,中学高级教师,亳州一中南校体 育教研组长,全国体育优质课一等奖获得者,华佗 五禽戏第五十八代传承人;长期从事五禽戏教学和 研究工作,参与创编了国家级课题“校园五禽戏”; 2014年全国学生运动会展示中获得优秀表演奖; 2015年指导的五禽戏传人进行的五禽戏教学获得全 国一等奖,编著的《华佗五禽戏之简易健身操》即.
延伸課程(專題研習)科美好生活之成長的我
微笑的天空 2008.12.1(星期一)農曆戌子年十一月四日的傍晚天上的金星、木星在上弦月左右相互輝映,形成「微笑的天空 」天文奇景。 「金星、木星伴月」,在空軍官校停機坪的上空微笑著面對著校園裡所有仰望天空的筧橋學子,真是令人難忘!因此,決定將網路詩集的初刊定名為「微笑的天空 」。
洪涝灾害重点传染病的预防 江苏省疾病预防控制中心 汪华.
定风波.
別忘了,每天都要…… 實踐8大自然養生法 保持3次排便 至少喝3杯蔬果汁 曬太陽30分鐘
LINUX 环境下程序开发基础 曙光用户培训课程系列 课程时间:1.5小时 更新日期:2008年3月.
泰式料理食譜 137實餐 謝宏德.
小 桔 灯 市场赢利能力与战略 主讲:杨贤耀.
奶 麻.
第 9 章 Linux的图形编程.
基于操作系统的编程复习 张玉宏
践行新时期广东精神 推进广东公路文化繁荣与发展 ——关于广东省公路文化建设与实践的思考
西餐烹調 香蒜白酒海瓜子麵 焦糖布丁.
选课网址:(必须用谷歌浏览器) 选课时间:星期天上午10点之后
Linux环境下程序编译 曙光信息产业(北京)有限公司.
第3章 Linux系统的基本操作 3.1 X Window图形化用户界面 3.2 GNOME的桌面环境 3.3 窗口和菜单操作
第2章 Linux概述 2.1 操作系统的功能和分类 2.2 Linux操作系统概述 2.3 Linux的应用现状与前景
Linux 基 本 命 令 man–命令帮助信息。 ls –看目录里文件的信息。 cd–换目录 mkdir–创建目录 rmdir–删除目录
第12章 shell编程基础 本章主要介绍shell编程的基础知识。shell脚本的执行类似于Linux下的任何其他命令,脚本可以包含复杂的逻辑,也可以包含一系列Linux命令行指令。在一个shell程序内可以运行其他shell脚本。通过本章的学习,读者可以学到如何使用bash(最流行的Linux.
第 10 章 数据库编程.
序及第0章.
Live CD— 免安裝!立即體驗 Fedora
製作人:詹舒羽、蘇士安、莊書靜 指導老師:林秋萍老師
嵌入式Linux开发流程 成都研究所操作系统团队.
嵌入式Linux编程环境.
黴飛色舞 組別:應用科學 組員:李悅慈、戴敬芳、楊佳琳 指導老師 :盧惠鶴老師 繳交報告日期:93/8/27 研究日期:93年8月9日.
Presentation transcript:

第 10 章 Linux的图形编程

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

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

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

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

10.3 初始化图形模式 例10.1 初始化视频子系统,设置显示模式为640×480大小。设置初始颜色为红色并对颜色值进行改变,使程序执行过程中背景色渐变。编写程序10-1.c,放在/home/cx/10-1目录下。 分析 用SDL_Init(SDL_INIT_VIDEO)初始化视频子系统,并用SDL_SetVideoMode()函数设置显示模式,最后用SDL_MapRGB()设置背景颜色。 流程图如图所示

10.3 初始化图形模式 步骤1 设计编辑源程序代码。 [root@localhost root]#mkdir /home/cx/10-1 10.3 初始化图形模式 步骤1 设计编辑源程序代码。 [root@localhost root]#mkdir /home/cx/10-1 root@localhost root]#cd /home/cx/10-1 [root@localhost 10-1]#gedit 10-1.c

10.3 初始化图形模式 步骤2 编写makefile工程文件 步骤3 执行make文件 步骤4 执行可执行文件 10.3 初始化图形模式 步骤2 编写makefile工程文件 [root@localhost 10-1]#vi makefile CC = gcc AR = $(CC)ar CFLAGS= -I/usr/include/SDL -lSDL -lpthread 10-1:10-1.c $(CC) $(CFLAGS) $^ -o $@ clean: -rm -f $(EXEC) *.elf *.gdb *.o 步骤3 执行make文件 [root@localhost 10-1]# make gcc -I/usr/include/SDL -lSDL -lpthread 10-1.c -o 10-1 步骤4 执行可执行文件 [root@localhost root]#./10-1 注意:gcc编译的时候要切换到文件所在目录下。如程序运行在Fedora Core 4环境,则不需要添加参数-lpthread。

10.3 初始化图形模式 SDL_SetVideoMode函数说明

10.3 初始化图形模式 SDL_Quit()函数说明 SDL_MapRGB函数说明

10.3 初始化图形模式 SDL_FillRect函数说明

10.3 初始化图形模式 SDL_UpdateRect函数说明

10.3 初始化图形模式 SDL_Delay函数说明 SDL使用中的一些数据类型: Uint8——相当于unsigned char 10.3 初始化图形模式 SDL_Delay函数说明 SDL使用中的一些数据类型: Uint8——相当于unsigned char Uint16——16位(2字节)unsigned integer Uint32——32位(4字节)unsigned integer Uint64——64位(8字节)unsigned integer

10.3 初始化图形模式 思考题: 编写一个简单的SDL初始化程序:要求背景色为红色,让屏幕停留5秒。 10.3 初始化图形模式 思考题: 编写一个简单的SDL初始化程序:要求背景色为红色,让屏幕停留5秒。 编写一个简单的SDL初始化程序:要求背景色的红、绿、兰为随机显示值,让屏幕停留10秒。

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

10.4基本绘图函数的应用 例10.2 使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640×480,画面的色深为16位,用Draw_Line函数画两条交叉的直线,一条直线起始点的坐标为(240,180),终止点的坐标为(400,300),另一条直线起始点的坐标为(400,180),终止点的坐标为(240,300)。再用Draw_Pixel函数绘制一条正弦曲线,程序名为10-2.c,存放在/home/cx/SDL_draw-1.2.11下。 步骤1 设计编辑源程序代码。 [root@localhost SDL_draw-1.2.11]#gedit 10-2.c

10.4 基本绘图函数的应用 步骤2 编写makefile工程文件 步骤3 执行make文件 [root@localhost 10-3]#vi makefile CC = gcc CCFLAGS = -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 10-2: 10-2.c $(CC) -o 10-2 10-2.c $(CCFLAGS) 步骤3 执行make文件 [root@localhost 10-2]# make gcc -o 10-2 10-2.c -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a

10.4 基本绘图函数的应用 步骤4 编译成功后,执行可执行文件10-2,输入如下: 步骤4 编译成功后,执行可执行文件10-2,输入如下: [root@localhost 10-2]#./10-2

10.4 基本绘图函数的应用 Draw_Line函数说明

10.4 基本绘图函数的应用 Draw_Pixel函数说明

10.4 基本绘图函数的应用 思考题: 编写一个简单的画线程序:要求设置背景色为红色,线条颜色为绿色,绘制一个边长为120的正三角形,同时让屏幕停留8秒。 线段长度无限短后就成为点,请用画线的方法画出正弦曲线。 能否用画线的方法实现动画。

10.4 基本绘图函数的应用 例10.3 使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640×480,画面的色深为16位,画5个黄色的同心圆,圆心坐标为(320,240),最小的圆半径为5,其他圆的半径以15的大小递增,程序名为10-3.c,存放在/home/cx/SDL_draw-1.2.11下。 步骤1 设计编辑源程序代码。 [root@localhost SDL_draw-1.2.11]#gedit 10-3.c

10.4 基本绘图函数的应用 步骤2 编写makefile工程文件 步骤3 执行make文件 [root@localhost 10-3]#vi makefile CC = gcc CCFLAGS = -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 10-3: 10-3.c $(CC) -o 10-3 10-3.c $(CCFLAGS) 步骤3 执行make文件 [root@localhost 10-3]# make gcc -o 10-3 10-3.c -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 步骤4 编译成功后,执行可执行文件10-3,输入如下: [root@localhost 10-3]#./10-3

10.4 基本绘图函数的应用 Draw_Circle函数说明

10.4 基本绘图函数的应用 思考题: 编写一个画圆的程序。要求设置背景色为黄色,线条颜色为蓝色,以正三角形的三个顶点为圆心,半径为60画三个圆,同时让屏幕停留8秒。 画一个半径渐渐增大、颜色随机变化的圆。 画一个圆,此圆沿着正弦曲线运动。 提示:请参考下列代码 for(i=0;i<120;i++,x=x+3,y=y+sin(x-80)) { Draw_Circle(screen,x,y, r, SDL_MapRGB(screen->format, 255,0,0)); SDL_Delay(100); Draw_Circle(screen,x,y, r, SDL_MapRGB(screen->format, 255,255,255)); Draw_Line(screen, x,y, x+3,y=y+sin(x-80),SDL_MapRGB(screen->format, 255,0,0)); SDL_UpdateRect(screen, 0, 0, 0, 0); /*更新整个屏幕*/ }

10.4 基本绘图函数的应用 10.4 使用SDL_draw库设计一个程序,初始化视频子系统,设置显示模式为640×480,画面的色深为16位。用Draw_Rect函数画两个矩形,一个矩形的左上角坐标是(80,180),宽和高分别是160和120,颜色为白色;另一个矩形的左上角坐标是(319,179),宽和高分别是242和122,颜色为黄色。用Draw_FillRect函数画一个矩形,其左上角坐标是(320,180),宽和高分别是240和120,颜色为红色。程序名为10-4.c,存放在/home/cx/SDL_draw-1.2.11下。 步骤1 设计编辑源程序代码。 [root@localhost SDL_draw-1.2.11]#gedit 10-4.c

10.4 基本绘图函数的应用 步骤2 编写makefile工程文件 步骤3 执行make文件 [root@localhost 10-4]#vi makefile CC = gcc CCFLAGS = -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 10-4: 10-4.c $(CC) -o 10-4 10-4.c $(CCFLAGS) 步骤3 执行make文件 [root@localhost 10-4]# make gcc -o 10-4 10-4.c -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 步骤4 编译成功后,执行可执行文件10-4,输入如下: [root@localhost 10-4]#./10-4

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

10.4基本绘图函数的应用 例10.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填充此圆角矩形。 步骤1 设计编辑源程序代码。 [root@localhost SDL_draw-1.2.11]#gedit 10-5.c

10.4 基本绘图函数的应用 步骤2 编写makefile工程文件 步骤3 执行make文件 [root@localhost 10-5]#vi makefile CC = gcc CCFLAGS = -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 10-5: 10-5.c $(CC) -o 10-5 10-5.c $(CCFLAGS) 步骤3 执行make文件 [root@localhost 10-5]# make gcc -o 10-5 10-5.c -Wall -I/usr/include/SDL -D_REENTRANT -I/home/cx/SDL_draw-1.2.11/include -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread /home/cx/SDL_draw-1.2.11/src/.libs/libSDL_draw.a 步骤4 编译成功后,执行可执行文件10-5,输入如下: [root@localhost 10-5]#./10-5

10.4基本绘图函数的应用 Draw_HLine函数说明: Draw_VLine函数说明: Draw_Ellipse函数说明: Draw_Round函数说明:

10.5 图片与文字显示 常用的函数及功能 :

10.5 图片与文字显示 例10.6 设计一个程序,初始化视频子系统,设置显示模式为640×480,画面的色深为16位,加载位图b.bmp,并按照一定的顺序把位图排列显示。设程序名为10-6.c,存放在/home/cx/下,位图名为b.bmp也存放在该目录下。 分析 在程序中编写一个showBMP()函数,用来显示位图,在主函数中调用它。showBMP()函数中给位图分配一个surface,得到位图的大小。在主函数中先初始化视频系统,设置视频模式,指定第一张图片的位置,然后利用for循环显示图片。 步骤1 设计编辑源程序代码。 [root@localhost cx]#gedit 10-6.c

10.5 图片与文字显示 步骤2 编译程序。 步骤3 编译成功后,执行可执行文件10-6,输入如下: 10.5 图片与文字显示 步骤2 编译程序。 切换到源程序所在目录下,用gcc进行编译,编译的时候加上-lSDL和-lpthread选项。 [root@localhost cx]# gcc -I/usr/include/SDL -lSDL -lpthread 10-6.c -o 10-6 或写成makefile文件,然后执行make命令。makefile文件代码如下: CC = gcc AR = $(CC)ar CFLAGS= -I/usr/include/SDL -lSDL -lpthread 10-6:10-6.c $(CC) $(CFLAGS) $^ -o $@ clean: -rm -f $(EXEC) *.elf *.gdb *.o 步骤3 编译成功后,执行可执行文件10-6,输入如下: [root@localhost cx]#./10-6

10.5 图片与文字显示 SDL_LoadBMP函数说明: SDL_BlitSurface函数说明:

10.5 图片与文字显示 思考题:要求自行制作一张矩形位图,用位图实现屏幕左上角到屏幕右下角对角线连接(模拟图如下图所示),图片按照阶梯的形式在程序运行的时候显示出来,同时让屏幕停留5秒,在Linux下编辑、编译、运行。

10.5 图片与文字显示 例10.7 设计一个程序,初始化视频子系统,设置显示模式为640×480,画面的色深为16位,使用SDL_ttf库在屏幕上显示“Linux下TrueType字体显示示例”,字体大小为38,颜色为红色。设程序名为10-7.c,存放在/home/cx/下。 分析 显示中文字体首先要打开字库文件,字库用的是simsun.ttc文件,视频子系统的初始化和设置都和之前一样,然后分配一个专门用来显示字体的surface,使用SDL_BlitSurface()对象快速转换。 步骤1 准备工作。 把Windows下C:\WINDOWS\Fonts中的simsun.ttc文件拷贝到Linux下的/usr/share/fonts/下,用于显示中文。 步骤2 设计编辑源程序代码。 [root@localhost cx]#gedit 10-7.c

10.5 图片与文字显示 步骤3 编译程序。 切换到源程序所在目录,用gcc进行编译,在编译时需要添加-lSDL_ttf参数选项。 10.5 图片与文字显示 步骤3 编译程序。 切换到源程序所在目录,用gcc进行编译,在编译时需要添加-lSDL_ttf参数选项。 [root@localhost cx]# gcc -I/usr/include/SDL -lSDL -lpthread 10-7.c -o 10-7 -lSDL_ttf 文件保存的时候请使用UTF8格式保存,才能正常显示中文字体。

10.5 图片与文字显示 TTF_OpenFont函数说明 TTF_SetFontStyle函数说明

10.5 图片与文字显示 TTF_RenderUTF8_Blended函数说明

10.5 图片与文字显示 TTF_Init函数说明 TTF_CloseFont函数说明

10.5 图片与文字显示 TTF_Quit函数说明 思考题:编写一个程序,主要实现粗体、斜体、下划线等字体效果,同时让屏幕停留5秒。

10.6 动画 动画的常用函数: 例10.8 设计一个程序,实现矩形的运动,矩形是通过位图显示,当矩形碰到四边时,会自动反弹,按任意键退出。按程序名为10-8.c,存放在/home/cx/下,位图素材(b.bmp)也存放在该目录下。 分析 加载位图直接使用SDL_LoadBMP()函数。位图在xy方向上的坐标都以3个单位的移动量在一定的时间差内起规律性变化,向左直至键盘激发退出事件。

10.6 动画 流程图

10.6动画 步骤1 设计编辑源程序代码。 [root@localhost cx]#gedit 10-8.c

10.6动画 步骤2 编译程序。 步骤3 编译成功后,执行可执行文件10-8,输入如下: 步骤2 编译程序。 切换到源程序所在目录下,用gcc进行编译,编译的时候加上-lSDL和-lpthread选项。 [root@localhost cx]# gcc –I/usr/include/SDL –lSDL 10-8.c –o 10-8 –lpthread 步骤3 编译成功后,执行可执行文件10-8,输入如下: [root@localhost cx]#./10-8

10.6 动画 SDL_GetTicks函数说明 SDL_Flip函数说明 思考题:编写一个程序,主要实现圆球运动效果,使用键盘事件,按下Esc键退出程序。

10.7 三维绘图 三维绘图的常用函数:

10.7 三维绘图 例10.9 设计一个程序,在屏幕上绘制一个立体矩形,并按照一定的角度和方向旋转。设程序名为10-9.c,存放在/home/cx/下。 分析 创建三维立体图形要先做一系列的初始化设置,要设置视觉角度、背景色、深度缓存、选择投影矩阵等,三维绘图中比较重要的就是矩阵的运用。具体到绘制的时候,是画一个个平面,同时要注意角度的选择和设置。其中,glTranslatef函数是用来指定具体的值来多元化矩阵,glRotatef函数让对象按照某个轴旋转,两者综合运用使得三维图形有不同的效果。 步骤1 设计编辑源程序代码。 [root@localhost cx]#gedit 10-9.c

10.7 三维绘图 步骤2 程序调试。 步骤3 编译成功后,执行可执行文件10-9,输入如下: 步骤2 程序调试。 切换到源程序所在目录下,用gcc进行编译,编译的时候除了-lSDL和-lpthread选项,还需加上-lGL和-lGLU参数,因为在这程序中用到三维库的支持。 [root@localhost cx]#gcc –I/usr/include/SDL –lSDL 10-9.c –o 10-9 –lpthread –lGL -lGLU 步骤3 编译成功后,执行可执行文件10-9,输入如下: [root@localhost cx]#./10-9

10.7 三维绘图 glViewport函数说明 glClearColor函数说明

10.7 三维绘图 glClearDepth函数说明 glDepthFunc函数说明

10.7 三维绘图 glShadeModel函数说明 glMatrixMode函数说明

10.7 三维绘图 glLoadIdentity函数说明 gluPerspective函数说明

10.7 三维绘图 glTranslatef函数说明 glRotatef函数说明

10.7 三维绘图 glBegin函数说明 glColor3f函数说明

10.7 三维绘图 思考题: 编写一个程序,实现正方体的旋转方向为顺时针,并且使得旋转的速度加快,正方体的上下面颜色为红色,左右面颜色为绿色,前后面颜色为蓝色。(小提示:旋转的速度可以根据旋转的角度值改变量来实现)。 把例10.9中的正方体改成三棱锥。

10.8 游戏程序入门 例10.10 利用SDL库,综合运用以上所学的函数及方法,实现大炮打飞机的游戏。游戏初始化的时候大炮在屏幕底部中间,从屏幕的上方不断出现飞机。可以使用键盘左右方向键控制大炮的左右移动,使用空格键发射炮弹。飞机水平运行,并逐渐往下移动。大炮弹若是击中飞机,飞机爆炸。系统会立即再产生飞机,保证飞机数量为两架。假设飞机下降到大炮的位置,那么大炮就被炸毁,游戏结束。程序名为10-10.c,存放在/home/cx文件下。本题中用到的素材大炮、飞机、背景图片等放在data文件夹里,data文件夹放在/home/cx文件下。 分析 游戏实现一架大炮发射炮弹去射击飞机的游戏。LoadImage()函数把位图添加进来,RunGame()中,调用DrawObject()把大炮、飞机等初始化,collide()函数处理炮弹击中飞机的情况,根据实际情况用CreateAir()创建新的飞机,最后用collicle()处理飞机击中大炮,游戏结束。 流程图如图所示。

10.8 游戏程序入门 步骤1 设计编辑源程序代码。 [root@localhost cx]#gedit 10-10.c

10.8 游戏程序入门 步骤2 程序调试。 步骤3 程序结果运行。 10.8 游戏程序入门 步骤2 程序调试。 切换到源程序所在目录下,用gcc进行编译,编译的时候加上-lSDL和-lpthread选项。 [root@localhost cx]# gcc -I/usr/include/SDL -lSDL 10-10.c -o 10-10 –lpthread 或写成如下的makefile文件,然后执行make命令。 CC = gcc AR = $(CC)ar CFLAGS= -I/usr/include/SDL -lSDL -lpthread 10-10:10-10.c $(CC) $(CFLAGS) $^ -o $@ clean: -rm -f $(EXEC) *.elf *.gdb *.o 步骤3 程序结果运行。

10.8 游戏程序入门 思考题: 改写程序10-8.c,画一块档板,用左右键移动档板,档住下落方块,使得方块不会与底边相碰。当方块与档板相碰时,方块反弹,游戏继续,积分加1;当方块与左、上、右边相碰时反弹,积分不变;当方块与底边相碰时,游戏结束,显示积分值。 改写程序10-10.c,改变飞机、大炮的形状与数量,其余与题10-10.c类似。

思考与实验 参考SDL_draw库中关于椭圆的函数介绍,画一个椭圆。 利用画线,画圆和画矩形,自行创意设计三者结合的图形 。 编写一个程序,运用绘图、位图与文字显示的知识,实现看图识字的效果。即画一个圆,用文字标志“圆”,用位图形式导入一些图片,例如苹果位图,文字标志“苹果”,程序运行结果如下图所示:

思考与实验 参考例10.10,模仿飞机打大炮的原理,实现一个军舰发射鱼雷打怪物的游戏。要求军舰在屏幕上方,向下发射鱼雷,打击不断从屏幕下方出现的怪物,如果怪物上升到和军舰相碰的时候,游戏结束。相关的素材图片请自行准备。 调试程序,根据需要制作相关素材。