计算机图形技术 余 莉 Yuli110@126.com 1205
教材和参考书 主要参考书: 吴宾、段海波、薛凤武译,《OpenGL编程权威指南》,中国电力出版社,2001.8 NeHe的OpenGL教程http://nehe.gamedev.net/default.asp 周炜的NeHe中文教程 http://www.owlei.com/DancingWind/ 清华大学计算机系计算机图形学基础课程主页http://cg.cs.tsinghua.edu.cn/course/
如何学习本课程? 以课件、教材为主线 勤于实践; 利用网络资源; 熟练OpenGL; 随时接受CG的新思想和新进展
本课程的考核方式 平时成绩(30%) 课堂提问+书面作业+上机实验成绩 期中成绩(20%) 期末成绩(50%)
身边的计算机图形学-电影
身边的计算机图形学-游戏 目前图形硬件发展的动力所在
什么是计算机图形学 计算机图形学:Computer Graphics, CG 研究如何利用计算机表示、生成、处理和显示图形的学科 图形通常由点、线、面、体等几何属性和颜色、纹理、线型、线宽等非几何属性组成
根据处理技术不同,图形可以分为 线框图形:基于线条信息表示的,如工程图、等高线地图、曲面的线框图等 真实感图形:利用计算机生成像照片一样真实的图形 场景表示:曲线曲面造型、实体造型 光照模型:光源、纹理、材质
奥迪汽车效果图和线框图
与相关学科的关系 发展特点:交叉、界线模糊、相互渗透 图像生成(计算机图形学) 数字图像 数据模型 模型变换 (计算几何) 图像变换 (图像处理) 模型(特征)提取 (计算机视觉,模式识别) 发展特点:交叉、界线模糊、相互渗透
Interactive Gemetric Modeling 一个典型的图形生成过程 3D Scanning Interactive Gemetric Modeling Model Libraries Displacement Mapping
图形学过程:绘制(Rendering) 变换(Transformation) 裁减(Clipping) 投影(Projection) 图像生成 光照明模型(Illumination Model) 物体材质属性 纹理信息(Texture)
图形学过程:图像显示与存储 硬件帧缓存(Hardware Framebuffer):控制三色电子枪发射的电子束强度 存储为磁盘文件 电影胶片记录 视频记录 打印
modeling + Rendering + Animation 计算机图形学的3大主题 modeling + Rendering + Animation
计算机图形学发展的历史回顾 历史追溯 硬件发展 图形显示器的发展 图形输入设备的发展 图形软件及软件标准的发展
50年代 1950年,第一台图形显示器作为美国麻省理工学院(MIT)旋风I号(Whirlwind I)计算机的附件诞生了 1958年,美国Calcomp公司由联机的数字记录仪发展成滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪 50年代末期,MIT的林肯实验室在“旋风”计算机上开发SAGE空中防御体系
60年代 1962年,MIT林肯实验室的I. E. Sutherland发表了一篇题为“Sketchpad:一个人机交互通信的图形系统”的博士论文--确定了交互图形学作为一个学科分支 计算机图形学之父 1983年获Coons奖 1988年获图灵奖 1962年,雷诺汽车公司的工程师 Pierre Bézier 提出Bézier曲线、曲面的理论 1985年获Coons奖
70年代 光栅图形学迅速发展 区域填充、裁剪、消隐等基本图形概念、及其相应算法纷纷诞生 图形软件标准化 1974年,ACM SIGGRAPH的与“与机器无关的图形技术”的工作会议 ACM成立图形标准化委员会,制定“核心图形系统”(Core Graphics System) ISO发布CGI、CGM、GKS、PHIGS
70年代 真实感图形学 1970年,Bouknight提出了第一个光反射模型 1971年Gourand提出“漫反射模型+插值”的思想,被称为Gourand明暗处理 1975年,Phong的简单光照模型- Phong模型 实体造型技术 英国剑桥大学CAD小组的Build系统 美国罗彻斯特大学的PADL-1系统
80年代 1980年Whitted提出了一个光透视模型-Whitted模型,并第一次给出光线跟踪算法的范例,实现Whitted模型 1984年,美国Cornell大学和日本广岛大学的学者分别将热辐射工程中的辐射度方法引入到计算机图形学中 图形硬件和各个分支均在这个时期飞速发展
90年代 微机和软件系统的普及使得图形学的应用领域日益广泛。 标准化、集成化、智能化 多媒体技术、人工智能、科学计算可视化、虚拟现实 三维造型技术
图形软件标准 第一个官方标准,1977 GKS (Graphics Kernel System) 一些非官方图形软件,广泛应用于工业界,成为事实上的标准 OpenGL(SGI) Direct3D (Microsoft) Xlib(X-Window系统) Adobe公司Postscript
计算机图形学的应用及研究前沿 计算机辅助设计与制造(CAD/CAM) 可视化(Visualization) 真实感图形实时绘制与自然景物仿真 计算机动画 用户接口(User Interface) 计算机艺术
计算机辅助设计与制造(CAD/CAM) CAD/CAM是计算机图形学在工业界最广泛、最活跃的应用领域 飞机、汽车、船舶的外形的设计 发电厂、化工厂等的布局 土木工程、建筑物的设计 电子线路、电子器件的设计 设计结果直接送至后续工艺进行加工处理,如波音777飞机的设计和加工过程
从二维信息中提取三维信息,在三维空间中重新构造出对应的三维形体,恢复形体的点、线、面及其拓扑关系,从而实现形体的重建
科学计算可视化 Scientific Visualization 必要性:直接分析大量的测量数据或统计数据有困难 目标:用图形表现抽象的数据 应用领域:医学图象重建,遥感,流场、气象、核爆模拟,有限元分析……。
可视化 信息可视化:信息流量,商业统计数据,股市行情…
可视化 在医学领域,可视化有着广阔的发展前途 是机械手术和远程手术的基础 将医用CT扫描的数据转化为三维图象,帮助医生判别病人体内的患处
真实感图形实时绘制与自然景物仿真
计算机动画 商业广告、影视特技/片头、动画片 教育、军事、飞行模拟等 1996 Independence Day 因其可视效果获Oscar. Toy Story 成为第一 部具有全三维计算机动画 特点的电影
我国第一部利用计算机辅助摄制的动画片是《咪咪钓鱼》,1991年由北方工业大学和北京电视台合作制作,以二维动画为主。用386微机和C语言编程,利用数字化仪和摄象机产生关键帧,再由计算机在相邻两幅关键帧之间内插生成中间帧,并自动跟踪上色。多层画面叠加在一起,形成完整的画面。10分钟的片子,5人小组花了10个月时间。
军事作战仿真
虚拟现实(Virtual Reality)
计算机艺术 计算机艺术—用计算机软件从事艺术创作 二维平面的画笔程序(如CorelDraw,Photoshop) 图表绘制软件(如Visio) 三维建模和渲染软件包(如3DMAX,Maya)、以及一些专门生成动画的软件(如Alias,Softimage)
用户接口 Macintosh微机首先在商品化产品上用形象的图形表示操作命令,使得普通用户也会用计算机画图、作日常计算。图文形式相结合大大改善了计算机交互操作的用户界面,开辟了计算机应用的很多新领域。
Windows环境下的图形生成:OpenGL OpenGL是SGI公司开发的一个跨平台的开放式图形编程工具,用户可以很方便的利用它开发出有多种特殊视觉效果的三维图形 作为图形硬件的软件接口,OpenGL集成了所有曲面造型、图形变换、光照、材质、纹理、融合、反走样等复杂的计算机图形学算法,将用户从具体的硬件和操作系统中解放了出来 现在 OpenGL 已经成为最主要的二、三维交互式图形应用程序开发环境
Windows环境下的图形生成:OpenGL Microsoft把OpenGL集成到Windows中 OpenGL本身是一个低层库,但在编程实践中还需要一些能简化编程任务、易于在窗口系统上执行的高层库 Windows平台所支持的OpenGL库函数主要有五类: 核心函数、实用库函数、 辅助库函数、 Windows专用函数、Win32 API函数
Windows环境下的图形生成:OpenGL 实用库函数以 glu 开头,是基于核心函数而比其更高一层的函数,包括纹理映射、坐标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体等。独立于工作平台。
Windows环境下的图形生成:OpenGL 辅助库函数 辅助库函数以 aux 开头,这些函数本来是用于初学者做简单的练习之用。由于简化,支持平台较少,不适合产品开发 windows专用函数 以 wgl 开头,用于连接Windows窗口系统和OpenGL。能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等。用于WindowsNT环境下。 Win32 API函数 用于处理象素存储格式和双缓冲区。只能用于Win32系统
VS2008(VC) 中使用OpenGL 第一步,选择一个编译环境; 第二步,安装GLUT工具包; 第三步,建立一个OpenGL工程。以VisualStudio2008为例。 选择File->New->Project(VC),然后选择Win32 Console Application,选择一个名字,然后按OK。 在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。 然后向该工程添加一个代码文件,取名为“xyz.c”,注意用.c来作为文件结尾。 搞定了,就跟平时的工程没什么两样的。
C# 中使用OpenGL (自学) 用第三方插件CSGL,其官方网站为:http://csgl.sourceforge.net/ 关键是使用其提供的两个DLL:csgl.dll 和 csgl.native.dll,csgl.dll是开发使用的,在一个C#工程中,用“项目”->“添加引用”->“浏览”找到csgl.dll 引用。 在需要使用OpenGL函数的cs文件的using声明中,加上:using CsGL.OpenGL命名空间,就可以使用静态GL类调用OpenGL函数和变量了
C# 中使用OpenGL(自学) 对于显示OpenGL窗口,需要自己建立一个从CsGL.OpenGL.OpenGLControl 类继承的控制类,并至少做以下重构: protected override void OnCreateControl() protected override void OnSizeChanged(EventArgs e) public override void glDraw() (在glDraw()中动态绘制想画的东西) 然后捆绑到一个Form窗体上显示
供参考:VC 中 OpenGL库安装(自学) 1. 启动 Visual C++ 2.0 或以上版本 2. 进入Project菜单 3. 选Settings项,弹出 Settings 对话框 4. 选Link项,在 Libraries 栏目中加入OpenGL库: opengl32.lib glu32.lib glaux.lib 5.选OK,则安装完毕
ACM SIGGRAPH 会议小知识 全称 “the Special Interest Group on Computer Graphics and Interactive Techniques” 60年代中期,由Brown 大学的教授Andries van Dam (Andy) 和IBM公司的Sam Matsa发起 1974年,在Colorado大学召开了第一届SIGGRAPH 年会,并取得了巨大的成功 每年只录取大约50篇论文
习题 1. Siggraph是() a. 图形学的杂志 b. 图形学的组织及其会议 c. 图形学的标准 d. 图形学的某个算法 2. 列举三个以上图形学的应用领域 3. 计算机图形学的三大主题是 、 和 。 4.分辨率为 1024×1024 的显示器需要多少字节位平面数为 24 的帧缓存? A. 512KB; B. 1MB; C. 2MB; D. 3MB ;
用计算机显示图形: 图像:1。绘制、摄制或印制的形象。 2。图形在媒介上的投影。
三维变换流程图 局部坐标 模型变换 世界坐标 取景变换 视点坐标 投影变换 投影坐标 设备变换 屏幕坐标 三维变换的流程图
三维变换的基本概念 场景造型 放置虚拟照相机 二维显示: 坐标系:场景坐标系=世界坐标系+局部坐标系 变换:模型变换 坐标系:视点坐标系(虚拟照相机的位置、朝向以及向上的方向) 变换:取景变换 (在视域四棱锥进行裁剪和背面剔除) 二维显示: 坐标系:投影坐标系和屏幕坐标系 变换:投影变换、二维变换
三维变换中的各种坐标系
场景坐标系和模型变换 几何场景建立于世界坐标系中 场景中的具体物体与局部坐标系相联系 局部坐标系可以简化物体的定义 物体建立=标准体素+变换 模型变换:物体从局部坐标系到世界坐标系的变换,平移、放缩、旋转等
三维变换中的各种坐标系
视点坐标系和取景变换 视点坐标系 由世界坐标系到视点坐标系的取景变换(在视域四棱锥进行裁剪和背面剔除) 视点坐标系定义于世界坐标系中; 其过程类似于拍照片: 照相机的位置 照相机镜头的朝向:视线方向 UP方向 由世界坐标系到视点坐标系的取景变换(在视域四棱锥进行裁剪和背面剔除)
视点坐标系的交互建立 坐标原点C=(Cx,Cy,Cz):相机的位置 单位向量N=(Nx,Ny,Nz):镜头的朝向 与N不平行的向量UP: 得到两个向量 U=(Ux,Uy,Uz) 和V=(Vx,Vy,Vz),然后单位化。 四个矢量C、U、V、N组成了视点坐标系
三维变换中的各种坐标系
屏幕坐标系和设备变换 在投影平面上,有一个矩形区域称为视窗,见上图坐标系中vovxvy的矩形和“视域四棱锥” 图中的矩形 设备变换 二维变换:将定义在视窗中的投影结果转换到以像素为单位的屏幕坐标系 扫描转换:将连续的几何物体转换为离散的光栅表示