图形学复习1——图形学图形系统概述与对象表示

图形学复习


CH1 图形学概述

1.1 图形学

计算机图形学是研究图形的输入、模型的构造和表示、图形数据库管理、图形的操作以及以图形为媒介的人机交互的方法和应用的一门综合性学科

其最主要的任务是:研究如何用数据模型生成数字图像,具体来说有以下几个方面:

  • 图形建模
  • 几何处理
  • 光栅化
  • 片元处理
  • 等等

计算机图形一般有两种表示方法:

  • 图像:枚举图形中所有的点构成的2维点阵
  • 图形:用图形的形状参数(参数方程、端点坐标等)和属性参数(颜色、线形等)来表示的参数模型

图形学中主要用后者表示计算机图形


CH2 图形系统

简单的图形系统由以下几个部件构成:

依次是输入设备(键盘、绘画版以及鼠标)、处理器、存储器、帧缓存和显示器

2.1 光栅扫描显示器

工作过程

电子束受偏转部件的控制,不断从左到右、从上到下将图像逐行逐点的扫描到显示屏上,通过控制电子束的强弱产生黑白、灰度或彩色的图像

显示屏面扫描线为N行,每一行又可以分为M个点,则整个屏幕为M x N的点阵

基本概念:

  • 帧:整个屏幕范围
  • 帧缓存:保存图形定义点的存储器
  • 颜色缓存:帧缓存中用来存储颜色信息的部分
  • 像素:屏幕上的一个点

2.2 图形系统主要任务

(1)建模

建模器输出几何对象的顶点数据集,它工作在对象坐标系(即局部坐标系,全局是世界坐标系,显式到显示设备是屏幕坐标系)

(2)几何处理

几何处理的对象是顶点,目标是确定显示在屏幕上的几何对象,并确定这些对象顶点的明暗值或颜色值投影,它主要包括以下几个步骤:

  • 投影:通过观察变换把几何对象从对象坐标系/世界坐标系变换到视点坐标系,再通过投影变换把视点坐标系变换成投影坐标系,将顶点表示为裁剪坐标
  • 图元装配:变换是点处理,后续把处理后的点组装成几何对象称为图元装配
  • 裁减:确定哪些图元图元的部分会被传送到光栅器,即确定显示在屏幕上的对象
  • 明暗处理:颜色赋值、光照渲染

(3)光栅化

光栅化是将裁剪后的对象生成片段(准像素),即确定哪些像素来近似表示线段、多边形等,并且根据系统颜色状态和光照模型进行片段颜色插值

(4)片元处理

顶点处理完毕后需要对片元处理,包括了纹理贴图、融合、半透明、反走样、隐藏面消除等等


CH3 对象表示

3.1 多边形网络

用若干个相邻的多边形表示三维物体的方法称为多边形网络表示法,多边形由首尾相连的边组成,边又由两个顶点构成

多边形网络中规定:

  • 一个顶点至少连接两条边
  • 一条边至少属于一个多边形且至多连接两个相邻多边形

(1)表示方法

多边形网络一般有三种表示方法:

  • 显式表示:显式地用顶点三个坐标去描述一个多边形,缺点:浪费存储空间(没有利用共享点/边信息)、重复描画共享点/边
  • 指向顶点表的指针:顶点放在表中,多边形用顶点指针表示,优点:节省空间(利用共享点)、便于修改顶点坐标,缺点:难以找出共享边且共享边仍被重复描画
  • 指向边表的指针:顶点放在表中,边用顶点指针表示放在边表中,多边形用边指针表示,克服大多数以上缺点

(2)多边形网络表示三维物体的缺点

虽然指向边表的指针表示客服了存储空间和重画的问题,但是用多边形网络表示三维物体存在一些本质的无法克服的问题:

  1. 多边形没有办法精确地表示曲面,为了实现较好的观察效果必须使用大量的多边形进行近似
  2. 在表示复杂拓扑和具有丰富细节的物体时,数据量大,建模、编辑、绘制、存储的工作量大

(3)曲面的多边形表示

二次曲面、超二次曲面等曲面,可以用曲面的参数方程表示(球的参数方程、椭球的参数方程等),可以通过这些参数方程把曲面划分成细小的多边形近似表示曲面,具体见后续OpenGL编程章节

3.2 样条

(1)样条表示

样条是通过一组指定点集而生成平滑曲线的柔性带,样条曲线是指用样条方法绘制的曲线,样条曲面是用两组正交样条曲线描述绘制的曲面

图形学中,样条曲线是由多项式曲线段连接而成的曲线,每段在边界处满足特定的连续性条件,样条可以用来设计曲线和曲面的形状,也可以用于指定场景中动画路径或照相机位置等等

曲线的显式表示无法表示封闭或多值曲线,也难以表示垂直切线的曲线;隐式表示计算复杂;参数表示刻画能力有限且推导复杂,因此样条表示的以下优点让其成为计算机图形学中广泛应用的曲线表示方法:

  • 表示能力强,可以表示形状任意复杂的曲线
  • 易于离散生成,容易控制形状和人机交互
  • 具有确定的参数变化区间,容易确定曲线的边界
  • 具有形式不变性
  • 用切向量来表示曲线的变化率,避免了非参数表示中垂直切线(斜率为无穷大)难以表示的情况

(2)插值和连续性条件

给定空间上一组有序的控制点,得到一条光滑的分段参数多项式曲线作为近似曲线的方法叫做插值,其中最靠近点的插值曲线叫做逼近曲线

曲线段连接时关心连接处的连续性,定义Cn(n=0,1,2,...)连续就是曲线段在连接处的k=0,1,2,...,n阶导数均相等,定义几何连续Gn(n=0,1,2,...)就是曲线段在连接处的k=0,1,2,...,n阶导数的方向相同(长度可以不同)

(3)三次样条插值

给出一组控制点pk=(xk,yk,zk),k=0,1,...,n,生成分段三次参数多项式曲线P(u)=(x(u),y(u),z(u))如下:

?????????x(u)=axu3+bxu2+cxu+dxy(u)=ayu3+byu2+cyu+dyz(u)=azu3+bzu2+czu+dz,(0≤u≤1)

不同的三次样条插值方法就是在不同的边界条件情况下,求出a,d,c,d和输入控制点之间的转换关系

(4)Hermite插值

Hermite插值是常见的三次样条插值方法,其在pk和pk+1之间的线段边界条件为:

???????????P(0)=pkP(1)=pk+1P′(0)=DpkP′(1)=Dpk+1,Dpk、Dpk+1为指定的导数值

根据以上边界条件计算得:

P(u)=[u3u2u1]?MH?????????????pkpk+1DpkDpk+1????????????

其中MH为Herimite矩阵:

MH=????????????2?301?23001?2101?100????????????

(5)Cardinal插值

Cardinal插值是一种定义了张量参数t(曲线和控制点之间的松紧程度,小于0松弛,大于0紧张)的插值方法,并且一个曲线段由四个控制点确定(Hermite插值是两个控制点和其对应的一阶导数),其边界条件为:

???????????P(0)=pkP(1)=pk+1P′(0)=12(1?t)(pk+1?pk?1)P′(1)=12(1?t)(pk+2?pk)

根据以上边界条件计算得:

P(u)=[u3u2u1]?MC?????????????pk?1pkpk+1pk+2????????????

其中MC为Cardinal矩阵:

MC=?????????????s2s?s02?ss?301s?23?2ss0s?s00????????????,其中s=1?t2

(6)Bezier曲线

给出一组控制点pk=(xk,yk,zk),k=0,1,...,n,将这n+1个控制点混合生成逼近Bezier多项式函数的曲线P(u)=(x(u),y(u),z(u)):

P(u)=∑k=0npkBEZk,n(u),(0≤u≤1)

其中Bezier混合函数为:

BEZk,n(u)=C(n,k)uk(1?u)n?k=n!k!(n?k)!uk(1?u)n?k

二项式系数C(n,k)可以递归表示,带入Bezier混合函数可以求得其递推式:

?????BEZk,n(u)=(1?u)BEZk,n?1(u)+uBEZk?1,n?1(u)BEZk,k(u)=uk,BEZ0,k(u)=(1?u)k

Bezier曲线一定通过第一个控制点和最后一个控制点

(7)三次Bezier曲线

一般高阶多项式较为复杂,一般软件包只支持运算量较小的三次Bezier曲线(控制点4个),其边界条件为:

???????????P′(0)=3(p1?p0)P′(1)=3(p3?p2)P″(0)=6(p0?2p1+p2)P″(1)=6(p1?2p2+p3)

根据以上边界条件计算得:

P(u)=[u3u2u1]?MBez?????????????p0p1p2p3????????????

其中MBez为Bezier矩阵:

MBez=?????????????13?313630?33001000????????????

(8)样条表示之间的转换

记P(u)=[u3u2u1]?M?F,那么不同样条表示之间的转换就是建立在P(u)相等关系上推导F之间的关系

如推导一条将Hermit曲线变换成Bezier曲线表示的变化矩阵:

MH?FH=MB?FB?FB=M?1B?MH?FH?FB=?????????????13?313630?33001000?????????????1?????????????2?301?23001?2101?100?????????????FH?FB=??????????????110000110130000132???????????????FH

3.3 其他表示方法

图形学中还有以下表示方法,作为了解:

  • 扫描表示法:物体沿路径扫描移动,外轮廓的轨迹定义了新物体
  • 结构实体几何法:几何实体的并、交、差运算
  • 八叉树:描述体像素网络结构
  • 分形几何法:类层次结构以及整体局部之间的自相似性去构造自然景物
  • 粒子系统:用随机模型去模拟光、火等
时间: 2024-09-29 19:42:48

图形学复习1——图形学图形系统概述与对象表示的相关文章

计算机图形学 复习笔记

计算机图形学 复习笔记 (个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42779341) 第一章 计算机图形学综述 研究内容 图形的概念:计算机图形学的研究对象 能在人的视觉系统中产生视觉印象的客观对象 包括自然景物.拍摄到的图片.用数学方法描述的图形等等 图形的要素 几何要素:刻画对象的轮廓.形状等 非几何要素:刻画对象的颜色.材质等 图形表示法 点阵表示 枚举出图形中所有的点,简称为图像. 参数表示 由图形的

图形学复习

交互式计算机图形学(第五版)1-7章课后题答案 计算机图形学基础答案全 计算机图形学考试重点计算题 What is the difference between Gouraud and Phong shading? Gouraud shading (AKA Smooth Shading) is a per-vertex color computation. What this means is that the vertex shader must determine a color for e

图形学复习3——观察和裁剪

图形学复习 CH5 二维观察 5.1 窗口.视口和二维观察流水线 窗口是指世界坐标系中要显式的区域称,窗口定义了显式的内容 视口是指窗口映射到显示器的区域,视口定义了在什么位置显示 通常将世界坐标系中一部分区域映射到设备坐标系的操作称为观察变换,二维观察变换流水线如下: 模型局部坐标→ 世界坐标 → 观察坐标 -(通过窗口视口描述)→ 规范化观察坐标 → 设备坐标 5.2 裁剪窗口到规范化视口的映射 通常所说的裁剪窗口就是窗口,即世界坐标系中要显示的区域,我们可以选择裁剪窗口的不同形状.大小以及

图形学复习2——几何变换

图形学复习 CH4 几何变换 4.1 基本二维变换 平移.旋转和缩放是常见的基本二维变换 (1)二维平移 将二维平面上点P=????xy????平移到P′=????x′y′????=?????x+txy+ty?????,则称T=?????txty?????为平移向量 那么有平移方程: P′=P+T (2)二维旋转 将二维平面上点P=????xy????绕原点旋转逆时针旋转θ角得到坐标P′=????x′y′????=????xcosθ?ysinθxsinθ+ycosθ????,则称R=????co

图形学复习4——光栅化(画线画圆扫描线反走样算法)

图形学复习 CH7 光栅化 前几章介绍了几何处理和裁剪变换,接下来的步骤就是光栅化 光栅化是将形式表示的几何图元转换为阵列表示的数据片元的过程,片元中每一个像素对应帧缓冲区中的每一个像素 7.1 线段生成算法 (1)DDA画线算法 设直线表达式为y=mx+b,输入直线两端点坐标(x0,y0)和(xend,yend),可以计算出m=yend?y0xend?x0和b=y0?m?x0 DAA是基于微分运算的线段生成算法,其主要计算式便是δy=mδx: 若|m|≤1则x方向的变化大于y方向的变化,以x方

图形学_二维图形的剪裁_Sutherland-Hodgeman_Cohen—Sutherland

一.Cohen-Sutherland剪裁算法 1.基本思想 对于每条线段P1P2分为三种情况处理: (1)若P1P2完全在窗口内,则显示该线段P1P2. (2)若P1P2明显在窗口外,则丢弃该线段. (3)若线段不满足(1)或(2)的条件,则在交点处把线段分为两段.其中一段完全在窗口外,可弃之.然后对另一段重复上述处理. 为快速判断,采用如下编码方法: 将窗口边线两边沿长,得到九个区域,每一个区域都用一个四位二进制数标识,直线的端点都按其所处区域赋予相应的区域码,用来标识出端点相对于裁剪矩形边界

计算机图形学之光栅图形学——反走样算法简介

本文是对 赵明老师 <计算机图形学>MOOC课程 部分章节的小总结. 走样是数字化不可避免的. 简化:

计算机图形学之光栅图形学——多边形的扫描转换之 X-扫描算法及改进

本文是对 赵明老师 <计算机图形学>MOOC课程 部分章节的小总结. 多边形有两种表示方法:顶点表示和点阵表示. X-扫描线算法: 算法步骤概括如下: 注意: 改进: 为了避免求交运算,引进一套特殊的数据结构:

Java面向对象复习(一)类和对象

类和对象 1)类和对象的概念?为什么要使用类? 2)如何定义类?定义类,定义类的属性(成员变量),定义类的方法(构造方法,成员方法) 3)如果适用对象?类 对象变量 =new 类(); 4)方法的定义:访问修饰符,返回值类型(void),方法名,参数列表(形参),方法体 5)方法调用:如果方法有参数的话,要传实参给方法 6)两个不同的参数传递方式:值传递,引用传递(数组,类,接口)值传递:实参在方法里面改变的结果是不保留的:引用传递:实参在方法里面改变的结果是保留的:赋值也是类似的道理. 7)成