国外经典教材·计算机科学与技术·交互式计算机图形学:基于OpenGL的自顶向下方法(第4版).
1_CG_Basics(1)
–
前 言
课程结构
– – –
第一章 计算机图形学基础 第二章 建模及模型变换 第三章 曲线曲面及多边形技术
–
– – – – –
第四章 视觉外观
第五章 纹理映射 第六章 高级着色 第七章 管线优化 第八章 非真实感图形绘制 第九章 图形交互技术
前 言
作业与考试
–
作业以编程实现为主,有评分,平时成绩占最 后总成绩的50% 课件下载及作业上交
1.4 图形学的发展目标
真实感 Realistic 实时性Real Time 艺术性Arctistic
1.4.1 实时计算机图形学
Real time rendering is concerned with making images rapidly on the computer. The user is immersed in a dynamic process.
–
– –
1.2 计算机图形学的发展
沉浸式图形学时期
– – –
虚拟现实系统Virtual Reality System; 增强现实系统Augmented Reality System将真实世界 信息和虚拟世界信息无缝集成; 相应图形硬件如数据衣、数据手套、数据鞋以及头盔、 立体眼镜、运动捕获设备等得以迅速的发展
1.1.2 计算机图形学的研究内容
2000年,Paul Fearing模拟雪片飞落、雪片堆积和风吹雪花的效果, 将降雪分为两个过程,分别建立堆积模型和稳态模型。
1.1.2 计算机图形学的研究内容
2001年Xu Ying-Qing
1.1.2 计算机图形学的研究内容
基于粒子系统的自然环境特效仿真
基于粒子系统的自然环境特效仿真摘要:基于粒子系统的特效仿真是虚拟自然环境可视化仿真中的一个重要环节。
阐述了粒子系统原理,根据粒子系统原理为虚拟自然环境中爆炸、火焰、烟雾、雨雪等不规则景物建立了粒子系统模型,分析了基于粒子系统特效仿真中的动态链表、三角函数链表、实时性等关键技术。
关键词:自然环境;粒子系统;特效仿真0 引言虚拟自然环境是场景仿真的重要基础。
在计算机仿真中,虚拟自然景物能否更好地可视化直接影响用户的使用反馈。
仿真不规则物体,是可视化计算机仿真的难点,因其外观特征极不规则,表面不光滑,而且具有复杂与随意变化过程,这使得用经典的欧几里德几何学对其描述显得无能为力。
尽管如此,国内外学者先后提出了粒子系统模型、细胞自动机模型、分形模型等表示不规则模糊物体的理论,其中W.T.Reeves 提出的粒子系统理论较为成功。
粒子系统就是由大量粒子集合在一起表现不规则物体的计算机模拟系统[1]。
如今,粒子系统已经应用在可视化虚拟环境仿真的各个方面,虚拟的雨雪、烟雾等特效是实现逼真的虚拟自然环境中不可或缺的一部分,也是粒子系统运用的主要领域。
1 粒子系统原理粒子系统对景物的绘制不同于以往造型、绘制系统的方法,它不是一个静态模型,而是一种过程模型。
如果可以找到有效的物理或生理过程,不规则物体的行为分析和建模将变得很简单,只要实现实时的物理几何模型即可。
一个粒子系统可由多个称为粒子的元素组成,每个粒子均具有形状、大小、运动方向、生存周期等属性,而一个粒子具有的属性取决于粒子系统所模拟的物体。
粒子系统是一个动态变化的系统,每时每刻都有新粒子产生以及旧粒子死亡。
系统中的粒子的各类信息都随时间而改变,粒子的初始状态、运动规律影响粒子的正确运行。
我们可以通过控制粒子的属性和变化过程来模拟一些动态自然物体。
粒子系统的实现需要以下5个步骤:①新粒子产生并具有新属性后进入系统;②结合粒子的动态特征对粒子进行诸如移动和变换之类的操作,同时改变粒子属性;③判断活动粒子的实时生命值;④删除超过其生命周期的粒子;⑤绘制并显示由系统中粒子所组成的图形。
计算机图形与图像 第二章 OpenGL编程 第一节 OpenGL简介
– 没有缺省的shader – 每个应用程序必须提供vertex shader和 fragment shader
• • • •
取消立即模式(immediate mode) 状态变量减少 函数废弃机制 非向后兼容
13
其他版本
• OpenGL ES
– 嵌入式系统 – 1.0版:简化的OpenGL 2.1 – 2.0版:简化的OpenGL 3.1
18
GLUT
• OpenGL实用工具库(OpenGL Utility Toolkit Library, GLUT)
– 提供所有窗口系统的共同功能
• • • • 创建窗口 从鼠标和键盘获取输入 菜单 事件驱动
• 代码可以在平台间移植,但是GLUT缺乏一些现代 GUI的控件和功能
– 无滚动条 – 可用FLTK、SDL
– NURBS曲面 – 支持光照,但不支持纹理
• PHIGS和PHIGS+都是ANSI标准和ISO标准
6
PHIGS与X
X Window系统(也常称为X11或X)R7.6
– – – – 1984年 DEC/MIT的雅典娜计划Data Equipment Company 数据设备公司 图形用户界面(GUI)环境底层框架,硬件无关 客户端-服务器(client-server)架构模型 GNONE、KDE
– 平台无关的API – 易于使用 – 与硬件非常贴近,从而可以充分发挥其性能 – 着重在于渲染 (rendering) – 没有提供窗口和输入接口,从而避免依赖于具 体的窗口系统
9
OpenGL的发展
• 早期是由 ARB掌控其发展
– 成员包括SGI, Microsoft, Nvidia, HP, 3DLabs, IBM, …… – 相对稳定 2.1(2006.7)/3.3(2010.3)/4.4(2013.7) – 发展反映了新的硬件能力
清华大学本科计算机课程介绍
课号:00240013 学分: 3 课程名称 中文 课程属性:全校任选 英文 开课学期:秋、春 Fundamentals of Computer-aided Design 出版社 清华大学出版社 出版年月 2002 年 8 月
计算机辅助设计技术基础 书名 作者
使用教材
计算机辅助设计技术基 础教程
本课程是计算机科学与技术系为全校本科生开设的一门重要的计算机专业基础 课,目的是培养学生的软件工程素质,提高学生的软件开发能力。 本课程以软件生命周期的主要活动为主线,从软件及软件工程的历史和发展、软 件开发过程、需求分析、软件设计、程序编码、软件测试、软件维护、软件项目管理、 标准及规范等方面全面介绍软件工程的基本理论、方法、技术和工具。
课号: 30240273 课程名称
学分: 3 中文
课程属性:本科必修 开课学期: 春季 数据结构 书名 作者 英文 Data Structure 出版社 出版年月 1997
使用教材 参考书 讲课对象 课 程 简 介
数据结构(C 语言版)
严蔚敏,吴伟民 清华大学出版社
[1] Kruse, et.al. Data Structures & Program Desing in C. [2] Knuth. The Art of Computer Programming. Volume 1. 本科生 适用专业 工业工程系 先修课 C 语言程序设计
This course focuses on the basic concepts, principles, algorithms and applications of computer-aided design(CAD), it mainly consists of the following topics: software and hardware system of CAD, two-dimensional transformations, line clipping, raster display of 2D graphics, curves Introduction and surfaces, solid modeling, three-dimensional transformations, three-dimensional viewing, visible-surface determination, basic illumination models, and introductions to AutoCAD, 3DMAX 5.0 and OpenGL. It is an ideal choice for students who want to learn the rudiments of this dynamic and exciting CAD technology. 姓 名 讲 课 教 师 职称 主要教学和科研领域 主要教学领域: (1)承担全校计算机辅助设计技术基础 课教学; (2)承担研究生的小波分析及其应用课教学; 主要研究领域:小波分析及其应用,科学计算可视化, 计算机图形学,几何造型和图象处理。 (1)承担全校计算机辅助设计技术基础课教学
计算机图形学OpenGL版实验1-4
实验1 OpenGL初识一、实验目的:熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘图的特点;利用VC+OpenGL作为开发平台设计程序,以能够在屏幕上生成任意一个像素点为本实验的结束。
二、实验内容:(1)了解和使用VC的开发环境,理解简单的OpenGL程序结构。
(2)掌握OpenGL提供的基本图形函数,尤其是生成点的函数。
三、该程序的作用是在一个黑色的窗口中央画一个矩形、三角形和三个点,如图所示。
下面对各行语句进行说明:首先,需要包含头文件#include <GL/glut.h>,这是GLUT的头文件。
然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数。
这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍;1)glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。
其格式比较固定,一般都是glutInit(&argc, argv)就行;2) glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。
GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。
更多信息,以后的实验教程会有讲解介绍;3) glutInitWindowPosition,设置窗口在屏幕中的位置;4) glutInitWindowSize,设置窗口的大小;5) glutCreateWindow,根据前述设置的信息创建窗口。
参数将被作为窗口的标题。
注意:窗口被创建后,并不立即显示到屏幕上。
需要调用glutMainLoop才能看到窗口;6) glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。
(暂且这样理解);7) glutMainLoop,进行一个消息循环。
计算机图形学1陈永强-文档资料
构想(Imagination):生动形象地反映设计者 的思想。
45
虚拟现实的关键技术
能以实时的速度生成有逼真感的景物图形。 能高精度的跟踪用户的头和手。 头戴显示器能产生高分辨率图象和较大的视角。 能对用户的动作产生力反馈。 实例(VRML,虚拟现实建模语言)
17
计算机图形学研究的对象
图形的要素: 几何要素和非几何要素。
计算机图形学中所研究的图形 从客观世界物体中抽象出来的带有颜色
及形状信息的图和形。
18
图形的表示
点阵法是用具有颜色信息的点阵来表示图形的一
种方法,它强调图形由哪些点组成,并具有什么 灰度或色彩。
参数法是以计算机中所记录图形的形状参数与属
10
主要参考书目
Donald Hearn,M.Pauline Baker著, 蔡士杰等译,计算 机图形学(第三版),电子工业出版社,2005。
孙家广,计算机图形学基础教程(第2版),清华大学 出版社,2009。
向世明,OpenGL编程与实例,电子工业出版社, 1999 。
Dave Shreiner等著,OpenGL编程指南(原书第7版), 机械工业出版社,2010。
课程学时安排
总学时:48 理论学时:32 实验学时:16
周四3-5节 1-10周 11-16周
理论课内容
绪论 计算机图形设备 交互式技术 几何造型技术 基本图形生成算法* 二维图形变换及二维观察* 三维图形变换及三维观察* OpenGL图形编程
9
实验课内容
实验1:直线与圆的生成算法 实验2:直线的2D变换 实验3:三角形的绘制与2D变换 实验4:长方体的绘制 实验5:球的绘制 实验6:球和长方体的颜色设置
计算机图形学_完整版 ppt课件
▲ 图像(Image)
➢一些相关概念: 像素 Pixel 网格图 Grid 位图 Bitmap 点阵图 光栅图 Raster 图片 Picture……
计算机图形学与虚拟现实 Computer Graphics and Virtual Reality
第一章 图形学综述 第二章 图形系统概述 第三章 输出图元 第四章 图元属性 第五章 图形变换 第六章 三维对象的表示 第七章 可见面判别算法 第八章 光照模型 第九章 图形用户界面和交互输入方法 第十章 颜色模型 第十一章 虚拟现实技术
系统 存储器
CPU
DAC
图 形
GPU
帧缓存 显存
卡
接口
视频卡
系统总线
其他输入/输出设备
图形卡工作原理示意
图形处理器
GPU
✓可看作连接计算机和显示终端的纽带。不仅存储图 形,还能完成大部分图形函数,减轻了CPU的负担, 提高了显示能力和显示速度。
图形软件体系结构
专业应用系统,如MATLAB、 AutoCAD、3DSMAX、 UG……
CGM 图元文件
CGI 设备相关服务
操作系统通信接口
图形输 入设备
图形 工作站
图形输 出设备
图形输出显示设备
阴极射线管 CRT
存储管式显示器→随机扫描显示器(矢量显示器)→ 刷新式光栅扫描显示器→彩色光栅扫描显示器
平板显示器FPD 等离子体显示板 薄膜光电显示器 发光二极管LED 液晶显示器LCD
边界表示 B-reps
使用一组多边形平面或曲面——面片,来描述 三维对象。面片将对象分为内部和外部。
编程书籍大全(高清晰pdf文字)
编程书籍大全(高清晰pdf文字)如想下载购买如下图书的PDF文字版,请访问/doc/cb716990.html,/lichao890427/blog/modif y/61c6dddc84bbe7f98c102967本人要做的书列表:MFC程序开发参考大全USB应用开发技术大全HTML参考大全Java范例开发大全Java开发技术大全Java 2参考大全Java Web开发典型模块大全Java Web开发技术大全精通Java Web整合开发Java 2游戏设计Java游戏编程Java Web开发实战1200例Java Web 2.0架构开发与项目实战开发者突击Java Web 开发详解 XML+XSLT+Servlet+JSP 深入剖析与实例应用Java,XML和Web服务宝典Java Web程序开发范例宝典Java 高手真经Java Web开发实战宝典Java Web开发技术方案宝典Java典型应用彻查1000例图形与网络游戏开发Java 5游戏编程JSP开发技术大全PHP函数参考大全小鬼当家:DHTML动态网页设计实例网页制作精彩百分百 DHTML动态网页详解百分百Visual C++ 游戏设计入门二维游戏设计与制作Visual C++编程实例与技巧集粹实用技术 Windows NT与Windows 2000设备驱动及开发精通Windows Sockets网络开发基于Visual C++实现java编程思想多核多线程技术 265多核程序设计技术通过软件多线程提升性能 351C++面向对象多线程编程 516Windows环境下的多线程编程原理与应用 356POSIX多线程程序设计 321Windows高级调试 505缓冲区溢出攻击检测、利用与预防 409LINUX内核源码剖析Windows内核情景分析LINUX内核设计与实现 335Linux内核网络栈源代码情景分析 810深入Linux内核架构 1040Linux内核修炼之道 350追踪Linux TCP/IP代码运行——基于2.6内核 579 Linux网络内核分析与开发 356Linux内核API完全参考手册 684Linux内核技术手册 188LINUX内核分析及高级编程 269Linux 2.6内核标准教程 368边干边学LINUX内核指导 655深入理解LINUX内核Linux内核分析及编程 823Linux内核完全剖析 882Linux内核源代码 615边干边学 LINUX内核指导 471Linux数据库编程 480Visual C++数据库编程实战 461Visual C++数据库开发基础与应用 318Visual C++数据库开发基础及实例解析 257Visual C++数据库开发技巧与实例 316Visual C++数据库系统开发案例精选 413Visual C++数据库系统开发完全手册 505Visual C++数据库通用模块开发与系统移植 452 Visual C++数据库开发典型模块与实例精讲 453 Visual C++数据库编程实战 461Visual C++ 6.0数据库系统开发实例导航 406Visual C++数据库编程技术与实例 477Visual C++数据库通用模块及典型系统开发实例导航 345 Oracle 11g数据库编程入门与实战 463新编JSP数据库编程入门 468ASP数据库编程 360Web数据库编程与应用 407操作系统内核与设计原理 588实用操作系统概念 840操作系统概念第7版翻译版 805Visual C++入门与提高 408Visual C++从入门到精通视频实战版*5 383-562 Visual C++实例精通 489中文Visual C++实例全解教程 484零基础学VISUAL C++ 399跨平台软件开发 198电脑游戏设计 196电脑游戏设计与开发运动规律设计篇 130Microsoft ActiveX技术与应用 180ActiveX控件面板快速学习手册 136神机妙算的电脑-计算机与人工智能 148计算机与人工智能 142游戏人工智能:计算机游戏中的人工智能 127开发过程调试技术 194反汇编原理及其实现技术 1733D游戏角色制作 190三维游戏引擎设计与实现 198Effective COM中文版 192三维游戏美工制作实用手册 187数据结构实践教程 408数据结构课程设计案例精编用C/C++描述 419数据结构与STL *2 288-532数据结构 STL框架 396数据结构使用C++标准模板库 STL 371数据结构C++语言描述应用标准模板库 STL 875数据结构与C++高级教程 664数据结构案例教程 C语言版 277数据结构实例教程 344算法:C语言实现第5部分图算法 305算法 C语言实现第1-4部分 457C/C++常用算法手册 406算法设计、分析与实现从入门到精通 C、C++和Java 410 算法技术手册 333妙趣横生的算法 C语言实现 377计算机算法与程序设计实践 456Visual C++网络通信编程技术详解 386Visual C++数据采集与串口通信测控应用实战 343 Visual C++串口通信技术详解 370Visual C++串口通信开发入门与编程实践 486C/C++串口通信典型应用实例编程实践 316Visual C++网络程序设计实例详解 342精通Visual C++串口通信技术与工程实践 377 Windows网络与通信程序设计 432-479Visual C++通信编程工程实例精解 268Visual C++网络通信程序开发基础及实例解析 396 Visual C++串口通信技术与典型实例 367 Windows环境下的汇编语言程序设计 350实用网络通信编程技术 271通信软件设计基础 239PC接口通信与Windows编程 542Visual C++串口通信技术与工程实践 377-502 Visual C++ .NET网络与通信高级编程范例 439 Visual C++串口通信工程开发实例导航 463Visual C++网络通信程序开发指南 316Windows网络程序设计完全讲义 392嵌入式通信软件设计 177C++网络编程卷1 运用ACE和模式消除复杂性 303 C++网络编程卷2 基于ACE和框架的系统化复用 350 ACE程序员指南网络与系统编程的实用设计模式 374黑客任务之华山论木马 380计算机图形学原理及算法教程 Visual C++版 316微机高级C语言调试技巧 265C语言程序开发范例宝典 490C语言高级实例解析 522高级C++程序分析与设计 288Windows多媒体编程基础 375多媒体编程实战 432C++语言学习利器-AI-CODE坦克机器人 400Java语言学习利器-AI-CODE坦克机器人 381C#语言学习利器-AI-CODE坦克机器人 348C++宝典 616USB外围设备设计与应用 291USB技术及应用设计 373USB接口技术 406USB设计应用实例 272USB接口开发技术 298USB应用开发技术大全 766USB应用开发宝典 738USB应用开发实例详解 635Windows API函数实用手册 398Windows API编程范例入门与提高 443WINDOWS/WIN32/WINDOWS NT 程序设计通用API函数参考733WINDOWS/WIN32/WINDOWS NT 程序设计专用API函数参考549Visual C++ 6.0高级编程技术多媒体篇 460Visual C++实践与提高数据库开发与工程应用篇 406Visual+C++实践与提高-串口通信与工程应用篇 *2 438-508Visual C++实践与提高数字图像处理与工程应用篇 468Visual C++实践与提高网络编程篇 342Visual C++实践与提高图形图像编程篇 486Visual C++实践与提高多媒体篇 460OpenGL编程技术详解 419Visual C++.NET小游戏开发时尚编程百例 297交互式计算机图形学:基于OpenGL的自顶向下方法 601 计算机图形显示、加速及实现技术 2383D游戏卷1 实时渲染与软件技术 5663D游戏卷2 动画与高级实时渲染技术 415DirectX游戏编程基础教程 282DirectX 3D游戏编程实用教程 485二维游戏设计与制作 287C++游戏设计案例教程 321游戏核心算法编程内幕 514游戏设计技术 346三维游戏引擎设计技术及其应用 494游戏引擎教程 284全方位3D游戏设计游戏引擎与游戏开发实例剖析 328 3D游戏编程 335-526C++图形与游戏编程基础 567可视化游戏编程技术 255OpenGL超级宝典 718COM+编程 407COM+编程指南 449COM+开发人员参考库 *5 375-570COM+开发指南 410精通COM+ 374精通Unreal引擎技术 670COM+技术解决方案设计 641COM+技术大全 551ATL技术内幕 635ATL COM程式设计 486COM+组件编程技术内幕最新版 496COM精髓 307COM与COM+从入门到精通 393C++Builder 6.0 COM程序设计 303C# COM+编程指南 226COM与.NET组件服务382深入学习:COM+高级编程 450精通.NET互操作 P/Invoke、C++ Interop和COM Interop 419 UG/Open API、MFC和COM开发实例精解 386从零开始学Visual C++ 320-432C++程序调试实用手册 505应用程序调试技术 452C语言开发实战宝典 59232位汇编语言程序设计 295Win32汇编语言程序设计教程 407微机原理、汇编语言及接口技术 30032位微机原理、汇编语言及接口技术 268危机原理与接口技术基于IA-32处理器和32位汇编语言 357 Win32汇编语言实用教程 341汇编语言实用教程基于Win32编程 274编程语言破解秘笈 216反汇编工具反解程序与PC系列汉字CC-DOS的反汇编 396反编译技术与软件逆向分析 2183D游戏编程入门经典 361Visual C++ .NET图形图像编程 648高级汇编语言程序设计及应用 31816-32位宏汇编语言程序设计 341Intel 8086/8088及Pentium宏汇编语言程序设计 306宏汇编语言程序设计编程指导 245Visual C++开发技术大全 771-842宏汇编语言MASM 6实用大全 657Open GL游戏编程 <--> OpenGL游戏编程 392宏汇编语言程序设计及应用 302Visual C++ 6.0程序设计与开发技术大全游戏编程全接触 385游戏编程入门 290-370人工智能游戏开发创造具有学习和反应能力的角色 405光速思考新一代光计算机与人工智能 362游戏编程All in One 662计算机不能做什么人工智能的极限 353C语言与人工智能 236ActiveX编程技术与技巧 492ActiveX使用指南 251ActiveX开发人员指南 452ActiveX轻松入门 261ActiveX、VBScript使用手册 320ActiveX与VBScript实战解析 396VBScript 2和ActiveX 程序设计 363VBScript程序员参考手册第3版中文 696VBScript 5.0实践与提高 300VBScript与JScript实例教程 323网页编程精彩实例 VBScript+Java+JavaScript+ActiveX 344 VBScript编程技巧 333VBScript时尚编程百例 336VBScript制作实例 466VBScript编程指南 248VBScript开发实例 571VBScript 可视化程序设计 473看实例学VBScript 266走进计算机病毒 448典型计算机病毒与系统研究 264计算机病毒分析与防范大全 512计算机病毒与反病毒技术 452计算机病毒分析与对抗 323-548计算机病毒及其防治技术 430计算机病毒揭秘 401DCOM入门 500Visual C++ 程序设计基础与项目实训 324GPGPU编程技术从GLSL、CUDA到OpenCL 323 Visual C++项目开发实例自学手册 307Visual C++案例开发集锦 302Visual C++ 6.0开发网络典型应用实例导航 501 Visual C++编程从基础到实践 571嵌入式Intel架构微机实验教程 525Visual C++多媒体编程技术 413图形库程序设计应用指南 486分布并行图形绘制技术及其应用 425GPU精粹实时图形编程的技术、技巧和技艺 497 GPU精粹 2 高性能图形芯片和通用计算机编程技巧 565 大规模并行处理器编程实战 211多媒体开发指南 784Microsoft windows多媒体程序员参考手册 317 Visual C++6.0 多媒体开发指南 280多媒体计算机原理与应用 215-230Windows环境下的多媒体程序设计 344MS-Windows多媒体程序设计实务与范例 273C++ Builder 5高级编程技术 2 GUI编程 457网络渗透技术攻防高手修炼 438网络渗透技术 678深入理解计算机系统 702软件加密技术内幕 405软件加密原理与应用 443网络攻击原理与技术 431PCI总线设备开发宝典 329Linux驱动程序开发实例 366精通Linux 设备驱动程序开发 468Windows设备驱动程序WDF开发 354嵌入式Linux驱动程序和系统开发实例精讲 478 嵌入式Linux驱动程序设计从入门到精通 316 LINUX设备驱动程序 569深入剖析加密解密 323加密与解码密码技术剖析与实战应用 244加密解密与网络安全技术 397加密与解密软件保护技术及完全解决方案399 加密与解密实战攻略 449万能钥匙传奇加密与解密实例教程 268 Cracker终结者提供最优秀的软件保护技术 216 C++游戏编程入门教程 296Why Programs Fail-系统化调试指南 406 DirectX游戏编程 273-366DirectX特效程序设计 613Windows游戏编程大师技巧 807Visual C++网络通信编程实用案例精选 504 Windows游戏编程 381网络游戏编程教程 294DirectShow实务精选 471DirectShow开发指南 364精通网络视频核心开发技术 698嵌入式Linux系统开发教程 360DirectX与VB .NET程序开发 308DirectX实时渲染技术详解 649DirectX高级动画制作 385DirectX角色扮演游戏编程 693计算机游戏编程基础篇 250精通DirectX 3D图形与动画程序设计 668Delphi DirectX图形与游戏程序设计 443DirectX 9 3D图形程序设计 366DirectX实用技巧 312DirectX 3D图形编程宝典 640计算机软件项目实训指导 257黑客工具箱 263-672Windows编程循序渐进 384大学Visual C++程序设计案例教程 313Visual C++开发实用编程200例 383多玩家游戏程序设计 536深入剖析Visual C++编程技术及应用实例 527 Visual C++通信编程工程实例精解 268C++编程你也行 317You Can Do It! C++编程新手互动教程 374 Visual C++网络游戏建模与实现 348用DirectX 6.0开发即时战略游戏 560Visual C++.NET小游戏开发时尚编程百例 297 DirectX 7速成教程 378加密与解密实战全攻略 228操作系统设计与实现(OSP2方法) 128操作系统设计与实现上第3版 453操作系统设计与实现第3版下 357嵌入式操作系统设计与实现 535Symbian OS架构手册手机操作系统设计与演进 397DSP实时多任务操作系统设计与实现 340FreeBSD操作系统设计与实现 516Linux 0.01内核分析与操作系统设计创造你自己的操作系统3154.4BSD操作系统设计与实现中文版 420操作系统设计及实现第2版 939UNIX 操作系统设计 360STL扩展技术手册卷1 集合和迭代器416 ==STL扩展技术手册卷C++STL基础及应用 369C++STL开发技术导引 439Effective STL中文版 50条有效使用STL的经验 208C++STL程序员开发指南 500STL源码剖析 494泛型编程与STL 548C++设计新思维泛型编程与设计模式之应用 323CodeGuru Visual C++编程精粹 503C++ STL中文版 535标准模板库自修教程与参考手册 STL进行C++编程 377C++面向对象程序设计使用STL编程 379Visual C++范例完全自学手册 488Visual C++实例精通 489Visual C++开发宝典 617Visual C++范例开发大全 <---> VisualC++范例大全 776Visual C++完全自学手册 430Visual C++开发实战宝典 769Visual C++项目开发案例全程实录 600Visual C++开发经典模式与实例 322Visual C++角色扮演游戏程序设计 336Visual C++冒险游戏程序设计 382游戏引擎教程 284数据零基础学嵌入式Linux C编程 426嵌入式系统软件设计 297计算机游戏程序设计 325-346面向对象的游戏开发 402三维游戏设计 209游戏设计完全教程 415大型计算机结构:并行处理器和联想处理器 179分布式操作系统设计 167Intel体系结构MMX技术开发指南 177PC 平台新技术 MMX 开发编程指南 136Visual C++程序开发范例宝典 784游戏软件开发基础 291C++游戏开发 270创造游戏中的艺术 2203D游戏开发大全 459-667Direct X游戏开发终极指南 692游戏中的网络编程技术及应用 328Visual C++项目开发全程实录 497软件设计精要与模式 452多媒体计算机技术 346Visual C++视频技术方案宝典 625Visual C++程序设计教程 259-320精通Windows程序设计基于Visual C++实现 470 Visual C++案例开发 302-401Windows程序设计技术基础 MFC与.NET 394Windows应用程序设计案例教程 264C++实用培训教程 344Visual C++ 游戏设计入门 310游戏开发能手精彩游戏自己编 283Visual C++6.0编程案例精解 436Visual C++网络与数据库编程百例 453游戏编程入门原书第3版 290Visual C++编程技巧典型案例解析 *4 319-373 Visual C++ 6.0程序设计学与用教程 338PC平台新技术MMX 应用编程实例 301Visual C++宝典陈国建 764C++跨平台开发技术指南 318轻松学用ADO编程 423Visual C++ 2008完全学习手册 655MFC程序开发参考大全 714MFC窗口程序设计 458MFC编程技巧与范例详解 360精通MFC程序设计 715精通MFC 746MFC Windows应用程序设计 381+105(习题解答) Visual C++ 6.0 MFC类库参考手册 869Visual C++ 6.0 MFC时尚编程百例 374Visual C++ MFC 函数实用手册 358掌握Visual C++-MFC程序设计与剖析 478 Visual C++ MFC 函数实用手册 358MFC Visual C++6 编程技术内幕 790Visual C++ MFC扩展编程实例 392Windows黑客技术揭秘与攻防 *2 325-346《黑客防线》2009 黑客编程VC专辑 392 WINDOWS开发人员超级工具集 1074Flash组件、游戏、SWF加解密 472黑客与反黑工具使用详解 406黑客反汇编揭秘 448计算机信息加密和解密 268软件加密技术从入门到精通 253加密解密全方位学习 310黑客调试技术揭密 516加密与解密实战入门 344加密与解密 *2 483-544微软.NET程序的加密与解密 340加密与解密点通点精 240Linux设备驱动开发详解 632Xen虚拟化技术 418Windows设备驱动程序WDF开发 354加密解密全攻略 400加密与解密实战全攻略 228加密与解密-SoftICE使用手册 315完全掌握加密解密实战超级手册 4300day安全软件漏洞分析技术 754暗战亮剑软件漏洞发掘与安全防范实战300 OpenCV教程基础篇 433基于OpenCV的计算机视觉技术实现 478学习OpenCV 中文版 601嵌入式系统高级C语言编程 322Visual C++高级编程实例精解 540单片机C高级语言程序设计及其应用 226实用软件工具与环境教程 C++高级编程 333 Linux C高级程序员指南 403Linux C程序员指南 373Linux高级程序设计 390-432零基础学Qt 4编程 389精通嵌入式Linux编程构建自己的GUI环境 210 Qt及Linux操作系统窗口设计 450精通Qt4编程 512Qt4图形设计与嵌入式开发 440Linux窗口程序设计:Qt4精彩实例分析 316 Visual C++高级界面特效制作百例 754C++高级程序设计 385C++高级参考手册 851Visual C++高级编程技巧 360C#高级编程学习捷径 341C#高级程序员指南 986Visual C++高级编程及其项目应用开发 457Visual C++高级编程 437Visual C++高级开发范例解析 326Visual C#高级编程范例 483Visual C++高级编程技术与实例 331C++高级编程 687跟我学VISUAL C++ 6.0 477C++高级语言程序设计 285C++高级进阶教程 424C++高级语言面向对象程序设计 344基于底层硬件的软件设计 640嵌入式实时操作系统及其应用开发 279嵌入式系统原理与开发 326-375计算机操作系统维护技术 335嵌入式系统原理、设计与应用 185-481嵌入式开发详解 353嵌入式Linux网络体系结构设计与TCP/IP协议栈 462 深入浅出Linux TCP/IP协议栈 341ZigBee2007/PRO协议栈实验与实践 315Linux IP协议栈源代码分析 652MATLAB与C/C++混合编程 254精通MATLAB 7.0混合编程 260深入浅出MATLAB 7.x混合编程 299网络安全高级软件编程技术 391 Windows系统编程原书第4版 391C语言与Unix系统编程 272LINUX系统编程 38264位微处理器系统编程和应用编程 726即时消息传递系统编程源代码解析 710深入分析Linux内核源代码 531嵌入式系统编程源代码解析 548Linux核心源代码分析 235Linux内核源代码情景分析Linux内核2.4版源代码分析大全 845黑客入侵防护系统源代码分析 406 Netscape Mozilla源代码指南 289 Linux内核源代码分析 634莱昂氏UNIX源代码分析 378源代码网络篇近5000个网络源代码 250 Linux黑客防范开放源代码安全指南 407 系统编程与操作系统 540IPv6路由协议栈原理与技术 198C/C++嵌入式系统编程 18332位嵌入系统编程 595TCP/IP网络编程 316TCP/IP-协议分析与应用编程 240黑客入侵网页攻防修炼 298精通Visual C++视频/音频编解码技术 498 Visual C++音视频编解码技术及实践 644 C++编程艺术 275用实例学C++ 271Windows网络编程 458-687Windows网络编程技术 233网络程序设计与开发 375Visual C++实现MPEG/JPEG编解码技术 380操作系统的设计与实现 275网络安全高级软件编程技术 391Windows黑客技术揭秘与攻防 2 Visual Basic篇 346.NET Framework 3.5开发技术详解 410.NET Framework 2.0程序设计 622MICROSOFT NET MICRO FRAMEWORK嵌入式编程 217基于.NET Framework 2.0 的Windows窗体应用开发 367Net Micro Framework嵌入式开发入门与典型实例 234.NET Framework 2.0高级编程 552Framework的设计与应用基于Windows Forms的应用开发实践618.NET Framework程序员查询辞典 374.NET Framework专业项目实例开发 615.NET Framework高级编程 620.NET Framework编程思想 234Microsoft .NET Framework程序设计 452/doc/cb716990.html, Compact Framework 技术内幕 709Visual Studio .NET Framework技术内幕 598计算机网络高级软件编程技术 421分形图形分布式并行生成技术 158二维和高维空间的分形图形艺术 248分形理论及其在信号处理中的应用 168PC技术内幕 552Visual C++技术内幕 814深入理解Linux网络技术内幕 997深入解析Windows操作系统 940Flash MX技术内幕 593Microsoft Visual C++ .NET技术内幕 920PC接口技术内幕 809Executabel UML 技术内幕 368COM/DCOM技术内幕 533Direct3D技术内幕 361Linux技术内幕 265Windows核心编程 770Linux编程典型实例解析轻松学用Linux编程Linux编程起步Windows汇编语言程序设计教程 364Windows汇编语言程序案例解析 430C语言最新编程技巧200例 619操作系统设计与实现第3版 810黑客防线 /////查询CPU源代码分析与芯片设计及Linux移植 596对等网络编程源代码解析 447GUI应用程序移植:在Linux上模拟Windows API的方法 370 Google API开发详解Google Maps与GoogleEarth双剑合璧504Google API大全编程·开发·实例 565Google Maps API开发大全 447重构手册 195重构改善既有代码的设计 428重构与模式 300反模式:危机中软件、架构和项目的重构 216UNIX技术内幕 751虚拟机系统与进程的通用平台 382UNIX进程间通信 362Visual C++网络编程经典案例详解 458DOS操作系统内核剖析深入浅出Visual C++入门、进阶与应用实例 511Visual C++开发入门与编程实践 497Visual C++编程深入引导 720黑客攻防实战编程 363小小黑客之路黑客工具、攻防及防火墙编程入门 480Python灰帽子黑客与逆向工程师的Python编程之道 194基于Web的远程监控系统 144NET网络编程与I/O技术实践 452IRQ,DMA & I/O使用手册 236I/O接口程序设计入门与应用 245GDI+高级编程 544GDI+图形程序设计 533GDI+程序设计实例 427精通GDI+编程 463GDI+程序设计 445软件过程之美 484Silverlight 2&/doc/cb716990.html,高级编程616零基础学通Silverlight 341Microsoft Silverlight 4从入门到精通 237Silverlight 2.0入门指南 393Essential Silverlight 2 中文版 260Web璀璨 Silverlight应用技术完全指南 464银光志 SILVERLIGHT 3.0开发详解与最佳实践 354圣殿祭司的Silverlight完美入门 369决战NET:/doc/cb716990.html, AJAX与Silverlight实战手册 790Silverlight:/doc/cb716990.html,与AJAX开发实战 385Silverlight权威讲座/doc/cb716990.html,整合秘技与独家案例剖析 361Silverlight魔幻银灯 316Silverlight揭秘 226erlight web应用从基础到实践 285Silverlight 范例导学 387网页飞花深入浅出 Python编译原理合集数据恢复合集CUDA范例精解通用GPU编程////290//////////////////没出C++反汇编与逆向分析技术揭秘 ////400//////////////////没出Windows PE权威指南////800//////////////////没出精通 Unreal Engine 3////690-828//////////////////没出计算机病毒揭秘与对抗////544//////////////////没出Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)学通Java Web的24堂课Java Web项目整合开发JQuery本人已有的书:+---api| | Direct3D原理与API参考(上册).pdf| | Direct3D原理与API参考(下册).pdf| | Windows API常用技巧汇编.pdf| | Windows+API+for+2000_XP实例精解.pdf| | 《Direct3D 技术内幕》(中文版).pdf| | 美河制作.WINDOWS系统编程第三版.pdf| || \---Microsoft_Win32_程序员参考大全| 函数(A-G).pdf| 函数(H-Z).pdf| 消息、结构和宏.pdf| 窗口管理和图形设备接口.pdf| 系统服务、多媒体、系统扩展、应用程序须知.pdf |+---C++| | C#高级编程第6版.pdf| | C++多核高级编程.pdf| | C++面向对象高效编程.pdf| | C++高级进阶教程.pdf| | c语言实例解析(第二版).pdf| | C语言程序设计实例精粹.pdf| | c语言编程精粹.PDF| | Effective.C.中文版.pdf| | Exceptional C++.pdf| | Exceptional.C++.Style.pdf| | More+Exceptional+c++(中文).pdf| | VC提高教程.pdf| | 程序设计实践.pdf| | 精通Visual C++图像编程.pdf| | 面向对象软件构造(第二版)中英对照版.pdf| || \---分形学| C与C++高级图形程序设计.pdf| 分形算法与程序设计Visual C++实现.pdf| 分形艺术程序设计.pdf| 分形艺术程序设计1.pdf| 用C++设计二维、三维分形图形程序.pdf| 电脑分形艺术.pdf|+---c编程| C++程序设计技能百练.pdf| C.Builder精彩编程实例集锦.pdf| c语言参考手册.pdf| MFC类库详解.chm| Visual C++ 6.0高级编程技术-OpenGL篇.pdf| Visual C++图形图像编程技巧.pdf| Visual C++实践与提高-COM和COM+篇.pdf| Visual C++高级编程及其项目应用开发.pdf| Visual C++高级编程技巧.pdf| Visual C++高级编程技巧与实例.pdf| Visual+C++实践与提高-ActiveX篇.pdf| Visual+C++实践与提高_环境剖析IDE篇.PDF| /doc/cb716990.html,编程实例.pdf | 精通Visual C++图像处理编程(第3版)随书光盘.rar |精通Visual C++图像编程.pdf|+---GPU编程| cuda-gdb.pdf| cuda-memcheck.pdf| CUDA.pdf| CUDA_Occupancy_Calculator.xls| CUFFT_Library.pdf| CUSPARSE_Library.pdf|+---gui编程&&TC编程| CEGUI教程.doc| codejock英文教程.doc| MATLAB图形界面编程.pdf| tc图形函数详解.chm| tc编程实例教程.rar| TC编程技术.pdf| Turbo+C高级程序员编程指南.pdf| turboc.txt| VC++图形用户界面开发指南code.rar| VGA实用编程技术.pdf| Visual C++ 界面编程技术.pdf| Visual+C++图形用户界面开发指南.pdf| WindowsForms_主要控件.chm| Xtreme.Toolkit.Pro v11.2.1 汉化方法及全过程.wps | 图形用户界面(GUI)开发与测试.ppt| 图形程序开发人员指南.pdf| 界面code.rar| 精通GUI MATLAB图形界面编程.pdf| 高级编程技术--tc图形界面.doc|+---Sql| mysql_5.1 中文参考文档.chm| mysql必知必会.pdf| SQL入门经典(第四版).pdf| Visual C++6.0信息管理系统开发实例导航.pdf| [SQL基础教程.第3版].(冯宇晖&贾文峰).扫描版.pdf|+---单片机| 51单片机C语言入门教程.pdf| 51单片机C语言实例.pdf| 51单片机C语言实例浅析.pdf| 51单片机C语言应用开发指南及实例精解.pdf| 51单片机c语言开发与实例-汤竞南.pdf| 51单片机及其C语言程序开发实例-戴仙金.pdf| 51单片机应用从零开始.pdf| 51单片机应用系统开发典型实例.pdf| 51系列单片机设计实例.pdf| 8051单片机实践教程-asm51汇编语文与C51高级语言应用.pdf | 8051系列单片机C程序设计完全手册.pdf| AVR单片机嵌入式系统原理与应用实践.pdf| C8051F+系列单片机开发与C语言编程.pdf| PIC单片机入门与实战.pdf| PIC单片机轻松入门.pdf| 从零开始学单片机技术.pdf| 十天学会单片机实例100.pdf| 单片机100例.pdf| 单片机20个实例超详细图文教程.pdf| 单片机C语言程序设计实训100例基于8051+Proteus仿真.pdf | 单片机C语言程序设计实训100例指导.pdf| 单片机C语言编程与实例.pdf| 单片机典型模块设计实例导航.pdf| 单片机原理及应用(王新颖).pdf| 单片机原理及应用技术.pdf| 单片机原理及应用设计实验.pdf| 单片机开发实例.pdf| 单片机接口模块应用与开发实例详解.pdf| 单片机接口模块应用与开发实例详解完整版.pdf| 单片机控制LED点亮的Multisim10仿真与实现.pdf | 单片机的40个实验.pdf| 单片机的C语言应用程序设计(修订版.pdf| 单片机语言C51应用实战集锦.pdf| 嵌入式系统设计与实例开发.pdf| 手把手教你学单片机(第二版).pdf| 手把手教你学单片机C程序设计.pdf| 手把手教你学单片机C语言单片机开发教程.pdf| 新概念51单片机C语言教程.入门、提高、开发.pdf | 新编MCS-51单片机应用设计.pdf| 爱上单片机.pdf| 详解Multisim 10对单片机仿真实验步骤.pdf| 零基础学单片机C语言程序设计.pdf|+---小工具| | ascii.txt| | BMP.txt| | Cg编程入门编(OpenGL) - GameRes_com.mht | | COM文件转换为_EXE文件.caj| | C符号.wps| | C语言库函数函数名带目录+索引.doc| | IOCCC1988获奖作品分析.pdf| | IP地址.txt| | ISIS_元件库索引.doc| | ISIS元器件中英对照.doc| | MyEclipse_破解办法__所有版本通用.docx| | Proteus_ISIS_库元件的分类.doc| | PROTEUS元件库元件名称及中英对照.doc| | scanf格式控制字符串.doc| | tcsearch.exe| | VC常量.chm| | 专用地址转换器 v1.3.exe| | 中科院其他视频教程截图-1.jpg| | 中科院其他视频教程截图-2.jpg| | 中科院其他视频教程截图-3.jpg| | 中科院视频教程共1000G截图及学习地址.txt| | 修复安全模式.reg| | 元件库.txt| | 单片机小精灵.exe| | 数学书籍推荐.docx| | 环境变量.txt| | 知识.txt| | 考研复试英语自我介绍经典模板及范文[1].doc| | 超级剪贴板.exe| | 转义字符.wps| | 进程知识库.chm| | 通讯录.txt| |+---未分类| 16_32位微机原理、汇编语言及接口技术(第2版).pdf | ATL开发指南.pdf| C++ Templates中文版.pdf| C++_Templates简体中文版.pdf| C++程序调试实用手册.pdf| DirectX_9.0_3D_游戏开发编程基础.pdf| dll应用.pdf。
计算机图形学完整ppt课件
工业设计
利用计算机图形学进行产品设计、仿 真和可视化,提高设计效率和质量。
建筑设计
建筑师使用计算机图形学技术创建三 维模型,进行建筑设计和规划。
计算机图形学的相关学科
计算机科学
计算机图形学是计算机科学的一个重 要分支,涉及计算机算法、数据结构、 操作系统等方面的知识。
物理学
计算机图形学中的很多技术都借鉴了 物理学的原理,如光学、力学等,用 于实现逼真的渲染效果和物理模拟。
02
03
显示器
LCD、LED、OLED等,用 于呈现图形图像。
投影仪
将计算机生成的图像投影 到大屏幕上,用于会议、 教学等场合。
虚拟现实设备
如VR头盔,提供沉浸式的 3D图形体验。
图形输入设备
键盘和鼠标
最基本的图形输入设备,用于操 作图形界面和输入命令。
触摸屏
通过触摸操作输入图形指令,常 见于智能手机和平板电脑。
多边形裁剪算法
文字裁剪算法
判断一个多边形是否与另一个多边形相交, 如果相交则求出交集部分并保留。
针对文字的特殊性质,采用特殊的裁剪算法 进行处理,以保证文字的完整性和可读性。
05
光照模型与表面绘制
光照模型概述
光照模型是计算机图形学中用于模拟光线与物体表面交互的数学模型。
光照模型能够模拟光线在物体表面的反射、折射、阴影等效果,从而增强图形的真 实感。
二维纹理映射原理
根据物体表面的顶点坐标和纹理坐标,计算出每个像素点对应的纹 理坐标,从而确定像素点的颜色值。
二维纹理映射实现方法
使用OpenGL中的纹理映射函数,将纹理图像映射到物体表面。
三维纹理映射技术
三维纹理坐标
定义在三维空间中的坐标,表示纹理图像上的位置。
计算机专业推荐书目
计算机专业推荐书目(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作报告、致辞讲话、条据书信、合同范本、规章制度、应急预案、心得体会、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as work reports, speeches, policy letters, contract templates, rules and regulations, emergency plans, insights, teaching materials, essay encyclopedias, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!计算机专业推荐书目读书不应算一种爱好,更应是现代文明人必不可少的生活内容。
计算机图形学教学大纲文档经典
XX大学《计算机图形学》教学大纲编写单位:__________执笔人:____________审核人:____________XX大学xx系20xx年9月[实验要求]本课程实验要求较高,实验内容多且相关性较强,有关实验的具体要求与内容需按实验大纲执行,本大纲中不再另行说明。
第一章绪论[教学内容1计算机图形学的目标与任务;计算机图形学的内容体系;计算机图形学相关学科;计算机图形学相关领域。
[教学目标与要求]熟练掌握:计算机图形学的内容体系;计算机图形学的目标与任务;掌握:计算机图形学的应用领域;计算机图形学的相关学科;了解:计算机图形学的发展。
[重点与难点]计算机图形学的内容体系;计算机图形学的目标与任务。
[教学时数]2学时第一节计算机图形学的目标与任务一、视觉交流是计算机图形学的目标与任务二、计算机图形学的三个基本任务第二节计算机图形学的内容体系一、基础模块二、建模与表示模块三、绘制模块四、交互技术第三节计算机图形学相关学科一、图形与图像二、相关学科第四节计算机图形学的应用领域一、计算机辅助设计与制造(CAD/CAM)二、科学计算可视化三、虚拟现实四、动画第五节计算机图形学的发展一、计算机图形学的发展简史二、计算机图形学的发展趋势[复习思考题]1、图形包括哪两方面的要素?在计算机中如何表示它们?2、图形的本质是什么?3、如何看待计算机图形学的发展趋势?第二章图形系统[教学内容1Visual图形系统概述;图形系统体系结构;图形支撑软件;图形硬件显示原理; [教学目标与要求]熟练掌握:图形系统体系结构;图形硬件显示原理掌握:图形系统基本概念和术语;了解:图形支撑软件[重点与难点]图形系统体系结构;图形硬件显示原理[教学时数]2学时第一节图形系统概述一、图形系统组成结构1.图形系统组成结构2.图形系统分类第二节图形系统体系结构一、概述二、应用程序阶段三、几何处理阶段四、光栅阶段第三节图形支撑软件一、OpenGL二、DirectX三、Java2D 和 Java3D第四节图形硬件显示原理一、图形显示设备及工作原理二、图形显示方式三、光栅扫描图形显示系统[复习思考题]1、从图形硬件显示原理角度,思考并分析如何显示直线?2、请你总结一下光栅显示系统的优缺点?3、在光栅显示系统中,显卡有什么作用?第三章二维图形生成[教学内容1直线生成算法;圆弧绘制算法;区域填充;字符;反走样技术; [教学目标与要求]熟练掌握:直线生成算法;区域填充;圆弧绘制算法掌握:反走样技术了解:字符编码[重点与难点]直线生成算法;区域填充;圆弧绘制算法[教学时数]8学时第一节直线生成算法一、数值微分法二、逐点比较法三、Bresenham画线法四、中点画线法第二节圆弧绘制算法一、基于光栅的整圆绘制算法二、角度离散法绘制圆弧和椭圆弧第三节区域填充一、种子填充算法二、多边形填充算法第四节字符一、字符的编码二、点阵字符三、矢量字符第五节反走样技术第六节编程实例-地图绘制一、地图绘制方法二、基于OpenGL的地图绘制[复习思考题]1、简述DDA算法、中点画线法、Bresenham画线法算法的思想?2、根据中点画圆法和Bresenham算法,绘制一条端点为(1,1)和(6, 5)的直线,画出对应各像素的位置?第四章图形几何变换[教学内容]二维几何变换;三维几何变换;图形几何变换的模式;[教学目标与要求]熟练掌握:二维几何变换;三维几何变换;掌握:图形几何变换的模式;[重点与难点]二维几何变换;三维几何变换;[教学时数]6学时第一节二维几何变换一、基本变换二、二维复合变换三、二维坐标系间的变换第二节三维几何变换一、基本变换二、三维复合变换三、三维坐标系间的变换第三节图形几何变换的模式一、固定坐标系模式二、活动坐标系模式[复习思考题]1、试编写对二维点实现平移、旋转、比例变换的程序。
山大教材资料`交互式计算机图形学`附录源码
交互式计算机图形学——基于openGL的自顶向下方法山东大学数字媒体技术专业课本教材附录程序第四版A.1 Sierpinski镂垫程序/* two-dimensional Sierpinski gasket *//* generated using randomly selected vertices *//* and bisection */#include <GL/glut.h>/*you may have to change the include to<glut.h> orelsewhere depending on where it is stored on your system *//* glut.h usually has included for gl.h and glu.h */void myinit(void){/* attributes */glClearColor(1.0, 1.0, 1.0, 1.0); /* white background */glColor3f(1.0, 0.0, 0.0); /* draw in red *//* set up viewing *//* 50.0 × 50.0 camera coordinate window with origin lower left */glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 50.0, 0.0, 50.0);glMatrixMode(GL_MODELVIEW);}void display(void){/* A triangle */GLfloat vertices[3][2]={{0.0,0.0},{25.0,50.0},{50.0,0.0}};int i, j, k;int rand(); /* standard random number generator */GLfloat p[2] ={7.5,5.0}; /* an arbitrary initial point inside traingle */ glClear(GL_COLOR_BUFFER_BIT); /* clear the window */glBegin(GL_POINTS);/* compute and plots 5000 new points */586交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)for( k=0; k<5000; k++){j=rand()%3; /* pick a vertex at random *//* Compute point halfway between selected vertex and old point */p[0] = (p[0]+vertices[j][0])/2.0;p[1] = (p[1]+vertices[j][1])/2.0;/* plot new point */glVertex2fv(p);}glEnd();glFlush(); /* clear buffers */}void main(int argc, char** argv){/* Standard GLUT initialization */glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* default, not needed */glutInitWindowSize(500,500); /* 500 × 500 pixel window */glutInitWindowPosition(0,0); /* place window top left on display */glutCreateWindow("Sierpinski Gasket"); /* window title */glutDisplayFunc(display);/* display callback invoked when window opened */myinit(); /* set attributes */glutMainLoop(); /* enter event loop */}A.2 生成Sierpinski镂垫的递归程序/* Recursive subdivision of triangle to form Sierpinski gasket *//* number of recursive steps given on command line */#include <GL/glut.h>#include<stdlib.h>/* initial triangle */GLfloat v[3][2]={{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}};int n;void triangle( GLfloat *a, GLfloat *b, GLfloat *c)/* display one triangle */附录A 实例程序587{glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);}void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int m){/* triangle subdivision using vertex numbers */GLfloat v0[2], v1[2], v2[2];int j;if(m>0){for(j=0; j<2; j++) v0[j]=(a[j]+b[j])/2;for(j=0; j<2; j++) v1[j]=(a[j]+c[j])/2;for(j=0; j<2; j++) v2[j]=(b[j]+c[j])/2;divide_triangle(a, v0, v1, m-1);divide_triangle(c, v1, v2, m-1);divide_triangle(b, v2, v0, m-1);}else triangle(a,b,c); /* draw triangle at end of recursion */}void display(void){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);divide_triangle(v[0], v[1], v[2], n);glEnd();glFlush();}void myinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2.0, 2.0, -2.0, 2.0);glMatrixMode(GL_MODELVIEW);glClearColor(1.0, 1.0, 1.0, 1.0);glColor3f(0.0,0.0,0.0);}void main(int argc, char **argv){n=atoi(argv[1]); /* or set number of subdivision steps here */glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(500, 500);glutCreateWindow("Sierpinski Gasket");588交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)glutDisplayFunc(display);myinit();glutMainLoop();}A.3 三维Sierpinski镂垫的递归程序/* Recursive subdivision of a tetrahedron to form 3D Sierpinski gasket *//* number of recursive steps given on command line */#include <stdlib.h>#include <GL/glut.h>/* initial tetrahedron */GLfloat v[4][3]={{0.0, 0.0, 1.0},{0.0, 0.942809, -0.33333},{-0.816497, -0.471405, -0.333333},{0.816497, -0.471405, -0.333333}};GLfloat colors[4][3]={{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{0.0,0.0,0.0}};int n;void triangle( GLfloat *va, GLfloat *vb, GLfloat *vc){glVertex3fv(va);glVertex3fv(vb);glVertex3fv(vc);}void tetra(GLfloat *a, GLfloat *b, GLfloat *c, GLfloat *d){glColor3fv(colors[0]);triangle(a,b,c);glColor3fv(colors[1]);triangle(a,c,d);glColor3fv(colors[2]);triangle(a,d,b);glColor3fv(colors[3]);triangle(b,d,c);}void divide_tetra(GLfloat *a, GLfloat *b, GLfloat *c, GLfloat *d, int m){GLfloat mid[6][3];int j;if(m>0){/* compute six midpoints */附录A 实例程序589for(j=0; j<3; j++) mid[0][j]=(a[j]+b[j])/2;for(j=0; j<3; j++) mid[1][j]=(a[j]+c[j])/2;for(j=0; j<3; j++) mid[2][j]=(a[j]+d[j])/2;for(j=0; j<3; j++) mid[3][j]=(b[j]+c[j])/2;for(j=0; j<3; j++) mid[4][j]=(c[j]+d[j])/2;for(j=0; j<3; j++) mid[5][j]=(b[j]+d[j])/2;/* create 4 tetrahedrons by subdivision */divide_tetra(a,mid[0],mid[1],mid[2], m-1);divide_tetra(mid[0],b,mid[3],mid[5], m-1);divide_tetra(mid[1],mid[3],c,mid[4], m-1);divide_tetra(mid[2],mid[4],d,mid[5], m-1);}else tetra(a,b,c,d); /* draw tetrahedron at end of recursion */}void display(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glBegin(GL_TRIANGLES);divide_tetra(v[0],v[1],v[2],v[3],n);glEnd();glFlush();}void myReshape(int w, int h){glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w,2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);elseglOrtho(-2.0 * (GLfloat) w / (GLfloat) h,2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, -10.0, 10.0);glMatrixMode(GL_MODELVIEW);glutPostRedisplay();}void main(int argc, char **argv){n=atoi(argv[1]); /* or enter number of subdivision steps here */glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500, 500);glutCreateWindow("3D Gasket");590交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)glutReshapeFunc(myReshape);glutDisplayFunc(display);glEnable(GL_DEPTH_TEST);glClearColor (1.0, 1.0, 1.0, 1.0);glutMainLoop();}A.4 Marching-Square程序/* generates contours using marching squares *//* region size */#define X_MAX 1.0#define Y_MAX 1.0#define X_MIN -1.0#define Y_MIN -1.0/* number of cells */#define N_X 50#define N_Y 50/* contour value */#define THRESHOLD 0.0#include<gl/glut.h>void display(){double f(double,double);int cell(double,double,double,double);void lines(int,int,int,double,double,double,double);double data[N_X][N_Y];int i,j;int c;glClear(GL_COLOR_BUFFER_BIT);/* form data array from function */for(i=0;i<N_X;i++)for(j=0;j<N_Y;j++)data[i][j]=f(X_MIN+i*(X_MAX-X_MIN) /(N_X-1.0),Y_MIN+j*(Y_MAX-Y_MIN)/(N_Y-1.0));/* process each cell */附录A 实例程序591for(i=0;i<N_X;i++)for(j=0;j<N_Y;j++){c=cell(data[i][j],data[i+1][j],data[i+1][j+1],data[i][j+1]);lines(c,i,j,data[i][j],data[i+1][j],data[i+1][j+1],data[i][j+1]);}glFlush();}/* define function f(x,y) */double f(double x, double y){double a=0.49, b=0.5;/* ovals of Cassini */return (x*x+y*y+a*a)*(x*x+y*y+a*a)-4*a*a*x*x-b*b*b*b;}/* define cell vertices */int cell(double a,double b,double c, double d){int n=0;if(a>THRESHOLD) n+=1;if(b>THRESHOLD) n+=8;if(c>THRESHOLD) n+=4;if(d>THRESHOLD) n+=2;return n ;}/* draw line segments for each case */void lines(int num,int i,int j,double a ,double b,double c,double d){void draw_one(int,int,int,double,double,double,double);void draw_adjacent(int,int,int, double,double,double,double);void draw_opposite(int,int,int,double,double,double,double);switch(num){case 1 : case 2: case 4 : case 7: case 8: case 11: case 13: case 14:draw_one(num,i,j,a,b,c,d);break;case 3: case 6: case 9: case 12:592交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)draw_adjacent(num,i,j,a,b,c,d);break;case 5: case 10:draw_opposite(num,i,j,a,b,c,d);break;case 0: case 15:break;}}void draw_one(int num,int i,int j,double a,double b,double c,double d){double x1,y1,x2,y2;double ox,oy;double dx,dy;dx=(X_MAX-X_MIN)/(N_X-1.0);dy=(Y_MAX-Y_MIN)/(N_Y-1.0);ox=X_MIN+i*(X_MAX-X_MIN)/(N_X-1.0);oy=Y_MIN+j*(Y_MAX-Y_MIN)/(N_Y-1.0);s witch(num){c ase 1 : case 14:x1=ox;y1=oy+dy*(THRESHOLD-a)/(d-a);x2=ox+dx*(THRESHOLD-a)/(b-a);y2=oy;break;c ase 2: case 13:x1=ox;y1=oy+dy*(THRESHOLD-a)/(d-a);x2=ox+dx*(THRESHOLD-d)/(c-d);y2=oy+dy;break;c ase 4: case 11:x1=ox+dx*(THRESHOLD-d)/(c-d);y1=oy+dy;x2=ox+dx;y2=oy+dy*(THRESHOLD-b)/(c-b);break;c ase 7: case 8:x1=ox+dx*(THRESHOLD-a)/(b-a);y1=oy;x2=ox+dx;y2=oy+dy*(THRESHOLD-b)/(c-b);break;}glBegin(GL_LINES);glVertex2d(x1,y1);附录A 实例程序593glVertex2d(x2,y2);glEnd();}void draw_adjacent(int num,int i,int j,double a,double b,double c ,double d){double x1,y1,x2,y2;double ox,oy;double dx,dy;dx=(X_MAX-X_MIN)/(N_X-1.0);dy=(Y_MAX-Y_MIN)/(N_Y-1.0);ox=X_MIN+i*(X_MAX-X_MIN)/(N_X-1.0);oy=Y_MIN+j*(Y_MAX-Y_MIN)/(N_Y-1.0);switch(num){case 3 : case 12:x1=ox+dx*(THRESHOLD-a)/(b-a);y1=oy;x2=ox+dx*(THRESHOLD-d)/(c-d);y2=oy+dy;break;case 6: case 9:x1=ox;y1=oy+dy*(THRESHOLD-a)/(d-a);x2=ox+dx;y2=oy+dy*(THRESHOLD-b)/(c-b);break;}glBegin(GL_LINES);glVertex2d(x1,y1);glVertex2d(x2,y2);glEnd();}void draw_opposite(int num,int i,int j,double a,double b,double c ,double d){double x1,y1,x2,y2,x3,y3,x4,y4;double ox,oy;double dx,dy;dx=(X_MAX-X_MIN)/(N_X-1.0);dy=(Y_MAX-Y_MIN)/(N_Y-1.0);ox=X_MIN+i*(X_MAX-X_MIN)/(N_X-1.0);oy=Y_MIN+j*(Y_MAX-Y_MIN)/(N_Y-1.0);switch(num){case 5 :x1=ox;y1=oy+dy*(THRESHOLD-a)/(d-a);x2=ox+dx*(THRESHOLD-a)/(b-a);594交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)y2=oy;x3=ox+dx*(THRESHOLD-d)/(c-d);y3=oy+dy;x4=ox+dx;y4=oy+dy*(THRESHOLD-b)/(c-b);break;case 10:x1=ox;y1=oy+dy*(THRESHOLD-a)/(d-a);x2=ox+dx*(THRESHOLD-d)/(c-d);y2=oy+dy;x3=ox+dx*(THRESHOLD-d)/(c-d);y3=oy;x4=ox+dx;y4=oy+dy*(THRESHOLD-b)/(c-b);break;}glBegin(GL_LINES);glVertex2d(x1,y1);glVertex2d(x2,y2);glVertex2d(x3,y3);glVertex2d(x4,y4);glEnd();}void myReshape(int w, int h){glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)gluOrtho2D(X_MIN, X_MAX, Y_MIN * (GLfloat) h / (GLfloat) w,Y_MAX * (GLfloat) h / (GLfloat) w);elsegluOrtho2D(X_MIN * (GLfloat) w / (GLfloat) h,X_MAX * (GLfloat) w / (GLfloat) h, Y_MIN, Y_MAX);glMatrixMode(GL_MODELVIEW);}void main(int argc, char **argv){glutInit(&argc, argv);glutInitWindowSize(500, 500);glutCreateWindow("contour plot");glutReshapeFunc(myReshape);glutDisplayFunc(display);glClearColor(0.0, 0.0, 0.0, 1.0);glColor3f(1.0,1.0,1.0);附录A 实例程序595glutMainLoop();}A.5 生成正方形的程序/* This program illustrates the use of the GLUT library forinterfacing with a Window System *//* The program opens a window, clears it to black,then draws a box at the location of the mouse each time theleft button is clicked. The right button exits the program.The program also reacts correctly when the window ismoved or resized by clearing the new window to black. */#include <GL/glut.h>#include <stdlib.h>/* globals */GLsizei wh = 500, ww = 500; /* initial window size */GLfloat size = 3.0; /* half side length of square */void drawSquare(int x, int y){y=wh-y;glColor3ub( (char) rand()%256, (char) rand()%256, (char) rand()%256);glBegin(GL_POLYGON);glVertex2f(x+size, y+size);glVertex2f(x-size, y+size);glVertex2f(x-size, y-size);glVertex2f(x+size, y-size);glEnd();glFlush();}/* reshaping routine called whenever window is resizedor moved */void myReshape(GLsizei w, GLsizei h){/* adjust clipping box */glMatrixMode(GL_PROJECTION);glLoadIdentity();596交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();/* adjust viewport and clear */glViewport(0,0,w,h);glClear(GL_COLOR_BUFFER_BIT);glFlush();/* set global size for use by drawing routine */ww = w;wh = h;}void myinit(void){glViewport(0,0,ww,wh);/* Pick 2D clipping window to match size of screen window.This choice avoids having to scale object coordinateseach time window is resized. */glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0.0, (GLdouble) ww, 0.0, (GLdouble) wh, -1.0, 1.0);/* set clear color to black and clear window */glClearColor (0.0, 0.0, 0.0, 1.0);glClear(GL_COLOR_BUFFER_BIT);glFlush();}void mouse(int btn,int state,int x,int y){if(btn==GLUT_RIGHT_BUTTON &&state==GLUT_DOWN) exit(0);}/* display callback required by GLUT*/void display();int main(int argc,char** argv){glutInit(&argc,argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutCreateWindow("square");myinit();glutReshapeFunc (myReshape);glutMouseFunc (mouse);附录A 实例程序597glutMotionFunc (drawSquare);glutDisplayFunc (display);glutMainLoop();}A.6 画图程序/* simple painting program with text, lines, triangles,rectangles,and points */#define NULL 0#define LINE 1#define RECTANGLE 2#define TRIANGLE 3#define POINTS 4#define TEXT 5#include <stdlib.h>#include <GL/glut.h>void mouse(int, int, int, int);void key(unsigned char, int, int);void display(void);void drawSquare(int, int);void myReshape(GLsizei, GLsizei);void myinit(void);void screen_box(int, int, int);void right_menu(int);void middle_menu(int);void color_menu(int);void pixel_menu(int);void fill_menu(int);int pick(int, int);/* globals */GLsizei wh = 500, ww = 500; /* initial window size */GLfloat size = 3.0; /* half side length of square */int draw_mode = 0; /* drawing mode */int rx, ry; /* raster position */GLfloat r = 1.0, g = 1.0, b = 1.0; /* drawing color */int fill = 0; /* fill flag */void drawSquare(int x, int y){598交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)y=wh-y;glColor3ub( (char) rand()%256, (char) rand()%256, (char) rand()%256);glBegin(GL_POLYGON);glVertex2f(x+size, y+size);glVertex2f(x-size, y+size);glVertex2f(x-size, y-size);glVertex2f(x+size, y-size);glEnd();}/* rehaping routine called whenever window is resizedor moved */void myReshape(GLsizei w, GLsizei h){/* adjust clipping box */glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();/* adjust viewport and clear */glViewport(0,0,w,h);glClearColor (0.8, 0.8, 0.8, 1.0);glClear(GL_COLOR_BUFFER_BIT);display();glFlush();/* set global size for use by drawing routine */ww = w;wh = h;}void myinit(void){glViewport(0,0,ww,wh);/* Pick 2D clipping window to match size of X window.This choice avoids having to scale object coordinateseach time window is resized.*/glMatrixMode(GL_PROJECTION);附录A 实例程序599glLoadIdentity();glOrtho(0.0, (GLdouble) ww , 0.0, (GLdouble) wh , -1.0, 1.0);/* set clear color to black and clear window */glClearColor (0.8, 0.8, 0.8, 1.0);glClear(GL_COLOR_BUFFER_BIT);glFlush();}void mouse(int btn, int state, int x, int y){static int count;int where;static int xp[2],yp[2];if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN){glPushAttrib(GL_ALL_ATTRIB_BITS);where = pick(x,y);glColor3f(r, g, b);if(where != 0){count = 0;draw_mode = where;}else switch(draw_mode){case(LINE):if(count==0){count++;xp[0] = x;yp[0] = y;}else{glBegin(GL_LINES);glVertex2i(x,wh-y);glVertex2i(xp[0],wh-yp[0]);glEnd();draw_mode=0;count=0;}break;case(RECTANGLE):if(count == 0){count++;xp[0] = x;yp[0] = y;600交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)}else{if(fill) glBegin(GL_POLYGON);else glBegin(GL_LINE_LOOP);glVertex2i(x,wh-y);glVertex2i(x,wh-yp[0]);glVertex2i(xp[0],wh-yp[0]);glVertex2i(xp[0],wh-y);glEnd();draw_mode=0;count=0;}break;case (TRIANGLE):switch(count){case(0):count++;xp[0] = x;yp[0] = y;break;case(1):count++;xp[1] = x;yp[1] = y;break;case(2):if(fill) glBegin(GL_POLYGON);else glBegin(GL_LINE_LOOP);glVertex2i(xp[0],wh-yp[0]);glVertex2i(xp[1],wh-yp[1]);glVertex2i(x,wh-y);glEnd();draw_mode=0;count=0;}break;case(POINTS):{drawSquare(x,y);count++;}break;case(TEXT):{rx=x;ry=wh-y;glRasterPos2i(rx,ry);count=0;附录A 实例程序601}}glPopAttrib();glFlush();}}int pick(int x, int y){y = wh - y;if(y < wh-ww/10) return 0;else if(x < ww/10) return LINE;else if(x < ww/5) return RECTANGLE;else if(x < 3*ww/10) return TRIANGLE;else if(x < 2*ww/5) return POINTS;else if(x < ww/2) return TEXT;else return 0;}void screen_box(int x, int y, int s ){glBegin(GL_QUADS);glVertex2i(x, y);glVertex2i(x+s, y);glVertex2i(x+s, y+s);glVertex2i(x, y+s);glEnd();}void right_menu(int id){if(id == 1) exit(0);else display();}void middle_menu(int id){}void color_menu(int id){if(id == 1) {r = 1.0; g = 0.0; b = 0.0;}else if(id == 2) {r = 0.0; g = 1.0; b = 0.0;}else if(id == 3) {r = 0.0; g = 0.0; b = 1.0;}else if(id == 4) {r = 0.0; g = 1.0; b = 1.0;}else if(id == 5) {r = 1.0; g = 0.0; b = 1.0;}else if(id == 6) {r = 1.0; g = 1.0; b = 0.0;}else if(id == 7) {r = 1.0; g = 1.0; b = 1.0;}602交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)else if(id == 8) {r = 0.0; g = 0.0; b = 0.0;}}void pixel_menu(int id){if (id == 1) size = 2 * size;else if (size > 1) size = size/2;}void fill_menu(int id){if (id == 1) fill = 1;else fill = 0;}void key(unsigned char k, int xx, int yy){if(draw_mode!=TEXT) return;glColor3f(0.0,0.0,0.0);glRasterPos2i(rx,ry);glutBitmapCharacter(GLUT_BITMAP_9_BY_15, k);/* glutStrokeCharacter(GLUT_STROKE_ROMAN,i); */rx+=glutBitmapWidth(GLUT_BITMAP_9_BY_15,k);}void display(void){int shift=0;glPushAttrib(GL_ALL_ATTRIB_BITS);glClearColor (0.8, 0.8, 0.8, 1.0);glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 1.0, 1.0);screen_box(0,wh-ww/10,ww/10);glColor3f(1.0, 0.0, 0.0);screen_box(ww/10,wh-ww/10,ww/10);glColor3f(0.0, 1.0, 0.0);screen_box(ww/5,wh-ww/10,ww/10);glColor3f(0.0, 0.0, 1.0);screen_box(3*ww/10,wh-ww/10,ww/10);glColor3f(1.0, 1.0, 0.0);screen_box(2*ww/5,wh-ww/10,ww/10);glColor3f(0.0, 0.0, 0.0);screen_box(ww/10+ww/40,wh-ww/10+ww/40,ww/20);glBegin(GL_LINES);glVertex2i(wh/40,wh-ww/20);glVertex2i(wh/40+ww/20,wh-ww/20);glEnd();附录A 实例程序603glBegin(GL_TRIANGLES);glVertex2i(ww/5+ww/40,wh-ww/10+ww/40);glVertex2i(ww/5+ww/20,wh-ww/40);glVertex2i(ww/5+3*ww/40,wh-ww/10+ww/40);glEnd();glPointSize(3.0);glBegin(GL_POINTS);glVertex2i(3*ww/10+ww/20, wh-ww/20);glEnd();glRasterPos2i(2*ww/5,wh-ww/20);glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'A');shift=glutBitmapWidth(GLUT_BITMAP_9_BY_15, 'A');glRasterPos2i(2*ww/5+shift,wh-ww/20);glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'B');shift+=glutBitmapWidth(GLUT_BITMAP_9_BY_15, 'B');glRasterPos2i(2*ww/5+shift,wh-ww/20);glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'C');glFlush();glPopAttrib();}int main(int argc, char** argv){int c_menu, p_menu, f_menu;glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(500, 500);glutCreateWindow("square");glutDisplayFunc(display);c_menu = glutCreateMenu(color_menu);glutAddMenuEntry("Red",1);glutAddMenuEntry("Green",2);glutAddMenuEntry("Blue",3);glutAddMenuEntry("Cyan",4);glutAddMenuEntry("Magenta",5);glutAddMenuEntry("Yellow",6);glutAddMenuEntry("White",7);glutAddMenuEntry("Black",8);p_menu = glutCreateMenu(pixel_menu);glutAddMenuEntry("increase pixel size", 1);glutAddMenuEntry("decrease pixel size", 2);f_menu = glutCreateMenu(fill_menu);glutAddMenuEntry("fill on", 1);glutAddMenuEntry("fill off", 2);glutCreateMenu(right_menu);glutAddMenuEntry("quit",1);glutAddMenuEntry("clear",2);glutAttachMenu(GLUT_RIGHT_BUTTON);604交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)glutCreateMenu(middle_menu);glutAddSubMenu("Colors", c_menu);glutAddSubMenu("Pixel Size", p_menu);glutAddSubMenu("Fill", f_menu);glutAttachMenu(GLUT_MIDDLE_BUTTON);myinit ();glutReshapeFunc (myReshape);glutKeyboardFunc(key);glutMouseFunc (mouse);glutMainLoop();}A.7 使用双缓存的程序/** double.c* This program demonstrates double buffering for* flicker-free animation. The left and middle mouse* buttons start and stop the spinning motion of the square.*/#include <GL/glut.h>#include <stdlib.h>#include <math.h>#define DEGREES_TO_RADIANS 3.14159/180.0static GLfloat spin = 0.0;GLfloat x,y;int singleb, doubleb;void square(){glBegin(GL_QUADS);glVertex2f(x,y);glVertex2f(-y,x);glVertex2f(-x,-y);glVertex2f(y,-x);glEnd();}void displayd(void){glClear(GL_COLOR_BUFFER_BIT);square();glutSwapBuffers();}void displays(void){glClear(GL_COLOR_BUFFER_BIT);square();glFlush();}void spinDisplay(void){spin = spin + 2.0;if (spin > 360.0) spin = spin - 360.0;x=25.0 * cos(DEGREES_TO_RADIANS*spin);y=25.0 * sin(DEGREES_TO_RADIANS*spin);glutSetWindow(singleb);glutPostRedisplay();glutSetWindow(doubleb);glLoadIdentity();glutPostRedisplay();}void myinit(void){glClearColor(0.0, 0.0, 0.0, 1.0);glColor3f(1.0, 1.0, 1.0);glShadeModel(GL_FLAT);}void mouse(int btn, int state, int x, int y){if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)glutIdleFunc(spinDisplay);if(btn==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN)glutIdleFunc(NULL);}void myReshape(int w, int h){glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho(-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w,50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0);elseglOrtho(-50.0*(GLfloat)w/(GLfloat)h,50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW);glLoadIdentity();}/* Main Loop* Open window with initial window size, title bar, * RGBA display mode, and handle input events.*/int main(int argc, char** argv){glutInit(&argc,argv);g lutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);s ingleb=glutCreateWindow("single buffered");myinit();g lutDisplayFunc(displays);glutReshapeFunc(myReshape);glutIdleFunc(spinDisplay);glutMouseFunc(mouse);g lutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);d oubleb=glutCreateWindow("double buffered");myinit();g lutDisplayFunc(displayd);glutReshapeFunc(myReshape);glutIdleFunc(spinDisplay);glutMouseFunc(mouse);g lutMainLoop();}A.8 选择模式拾取程序/* demonstrates picking used selection mode */#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>void init(){glClearColor(0.0, 0.0, 0.0, 0.0);}void drawObjects(GLenum mode){if(mode == GL_SELECT) glLoadName(1);glColor3f(1.0, 0.0, 0.0);glRectf(-0.5, -0.5, 1.0, 1.0);if(mode == GL_SELECT) glLoadName(2);glColor3f(0.0, 0.0, 1.0);glRectf(-1.0, -1.0, 0.5, 0.5);}void display(){glClear(GL_COLOR_BUFFER_BIT);drawObjects(GL_RENDER);glFlush();}/* processHits prints out the contents of the* selection array.*/void processHits (GLint hits, GLuint buffer[]){unsigned int i, j;GLuint ii, jj, names, *ptr;printf("hits = %d\n", hits);ptr=(GLuint *) buffer;for (i = 0; i < hits; i++) { /* for each hit */names = *ptr;ptr+=3;for (j = 0; j < names; j++){ /* for each name */if(*ptr==1) printf ("red rectangle\n");else printf ("blue rectangle\n");ptr++;}printf ("\n");}}#define SIZE 512void mouse(int button, int state, int x, int y){GLuint selectBuf[SIZE];GLint hits;GLint viewport[4];if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {glGetIntegerv(GL_VIEWPORT, viewport);glSelectBuffer (SIZE, selectBuf);glRenderMode(GL_SELECT);glInitNames();glPushName(0);glMatrixMode(GL_PROJECTION);glPushMatrix();glLoadIdentity();/* create 5×5 pixel picking region near cursor location */gluPickMatrix((GLdouble) x, (GLdouble) (viewport[3] - y), 5.0, 5.0, viewport);gluOrtho2D(-2.0, 2.0, -2.0, 2.0);drawObjects(GL_SELECT);glMatrixMode(GL_PROJECTION);glPopMatrix();glFlush();hits = glRenderMode(GL_RENDER);processHits(hits, selectBuf);glutPostRedisplay();}}void reshape(int w, int h){glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D (-2.0, 2.0, -2.0, 2.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void keyboard(unsigned char key, int x, int y){switch (key){case 27:exit(0);break;}}/* Main Loop */int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow(argv[0]);init();glutReshapeFunc(reshape);glutDisplayFunc(display);glutMouseFunc(mouse);glutKeyboardFunc(keyboard);glutMainLoop();return 0;}A.9 立方体旋转程序/* Rotating cube with color interpolation *//* Demonstration of use of homogeneous coordinatetransformations and simple data structure for representing cube from Chapter 4 *//* Colors are assigned to the vertices *//* cube is centered at orign*/#include <stdlib.h>#include <GL/glut.h>GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},{1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},{1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0},{1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};void polygon(int a, int b, int c, int d){/* draw a polygon via list of vertices */glBegin(GL_POLYGON);glColor3fv(colors[a]);glVertex3fv(vertices[a]);glColor3fv(colors[b]);glVertex3fv(vertices[b]);glColor3fv(colors[c]);glVertex3fv(vertices[c]);glColor3fv(colors[d]);glVertex3fv(vertices[d]);glEnd();}。