计算机图形学

第一节课

课程基本情况

课程名称: 计算机图形学

课程性质: 专业课

适用专业: 软件工程专业本科

学时: 32学时(24学时理论授课+8学时实验上机)

学分:2 学分

考核方式: 闭卷考试;总成绩=64%期末成绩+16%平时成绩+20%实验成绩

使用教材: 孙家广.《计算机图形学基础教程(第2版)》[M].北京:清华大学出版社,2009.8 下载

教材封面.jpg

参考资料:

[1]孔令德.《计算机图形学基础教程(Visual C++版)(第2版)》[M].北京:清华大学 出版社,2013.3

[2]于万波.《计算机图形学(VC++实现)(第2版)》[M].北京:清华大学出版社,2017.1

教学目的与重点:

(一)课程的重要性

计算机图形学是计算机系本科生的一门重要课程,是计算机学科中最活跃的一个分支之一,是虚拟现实、计算机动画、可视化等课程的基础,在ACM/IEEE的计算机科学教学大纲中有这门课的要求。

(二)课程在内容安排及教学过程中的特色

本课程以课堂教学、上机实践、课后作业相结合的方式进行教学。上机题和作业题在上完相关内容后布置。上机作业在学期结束前提交上机实验报告。

(三)通过该课程学习学生应掌握的知识、达到的水平或能力

既向学生传授图形学的经典方法和最新成果,也注重培养学生动手实践能力。初步掌握光栅图形学、几何造型绘制的知识。能够编程实现大部分的光栅算法和简单的Bezier曲线的几何计算。

课程主要教学内容

第一章 绪论(2学时)

1.1 计算机图形学的研究内容

1.2 计算机图形学发展的历史回顾

1.3 计算机图形学的应用与研究前沿

1.4 图形设备

第二章 光栅图形学(16学时)

2.1 直线段的扫描转换算法

2.1.1 数值微分法

2.1.2 中点划线法

2.1.3 Bresenham算法

2.2 圆弧的扫描转换算法

2.2.1 圆的特征

2.2.2 中点画圆法

2.3 多边形的扫描转换与区域填充

2.3.1 多边形的扫描转换

2.3.2 区域填充算法

2.4 字符

2.4.1 点阵字符

2.4.2 矢量字符

2.4.3 字符属性

2.5 裁剪

2.5.1 直线段裁剪

2.5.2 多边形裁剪

2.5.3 字符裁剪

2.6 反走样

2.6.1 提高分辨率

2.6.2 区域采样

2.6.3 加权区域采样

2.7 消隐

第三章 几何造型技术(6学时)

3.1 参数曲线和曲面

3.1.1 曲线曲面的表示

3.1.2 曲线的基本概念

3.1.3 插值、拟合和光顺

3.1.4 参数化

3.1.5 参数曲线的代数和几何形式

3.1.6 连续性

3.1.7 参数曲面的基本概念

3.2 Bezier曲线与曲面 (受课时影响只能讲到这里)(重点)

3.2.1 Bezier曲线的定义和性质

3.2.2 Bezier曲线的地推算法

3.2.3 Bezier曲线的升阶与降阶

3.2.4 Bezier曲面的定义和性质

第四章 真实感图形学

第五章 图形标准

**
**

实验教学内容(8学时)

实验一:第一个OpenGL程序
实验二:DDA直线扫描算法
实验三:区域填充扫描线算法
实验四:Cohen-Sutherland裁剪算法
实验五:绘制Bezier曲线

扩展资料

2018计算机图形学研究报告




计算机图形学公开课:

推荐在线学习中国大学MOOC(https://www.icourse163.org/)上的国家精品课程

——计算机图形学(中国农业大学,赵明)

计算机图形学_中国农业大学_中国大学MOOC(慕课)

2019年图灵奖公布!计算机图形学先驱Hanrahan和Catmull获奖,祝贺两位好莱坞3D动画大片技术元老

https://mp.weixin.qq.com/s/XJyA0aVUIyRz2AY0XdUyDA

第二节课

直线段的扫描算法

取整

y=kx+by=kx+b

如何把数学上的一个点转换成一个屏幕像素点?
如:P(1.7,0.8) ----int取整–>> P(1,0) (截位取整)

截位取整不精确,仍使用截位取整,提高精度。

P(1.7,0.8) ----(+0.5)取整–>> P(2,1) (截位取整)

在计算机中,加法的速度最快,一切运算都是通过转换到 加法 运算符执行操作的。

直线绘制的三个著名算法

1、数值微分法(DDA)(Digital Differential Analyzer)

引入图形学思想—增量思想

$ y_{i+1}=y_i + k $

含义:这个式子含义: 当前步的y 等于前一步的y+k

这样就通过了增量思想,将乘法变成了加法。

x每加1,y加k;y每加1,x加1/k。

改进效率: 每一步运算都对y进行取整

第三节课

(1)改进效率。
把浮点数变成int,
(2)从直线方程出发 y=kx+by=kx+b 引出以下方法:

中点画线法

image-20210326153425862

点和直线的三种关系

image-20210326153706938

理想直线

image-20210326154436754

如何判断理想直线在M的上面还是下面:

将M坐标带入到理想直线方程中:
image-20210326154552372

di<0:d_i < 0: M在Q下方 应取PuP_u

di>0:d_i > 0: M在Q上方 应取PdP_d

image-20210326154806184

计算 did_i

image-20210326154928992

推导d值的递推公式:

image-20210326160306966

image-20210326160335588

小结

  1. 中点:直线一般式方程;DDA:斜结式

Bresenham算法

image-20210326162313984

第四节课

回顾

DDA:把算法效率提高到每步只做一个加法
基于斜结式。

中点: 算法进一步把效率提高到每步只做一个整数加法。基于一般式方程。误差值:将中点坐标代入函数方程。d=F(xm,ym)d=F(x_m,y_m)

Bresenham: 提供一个更一般的算法。该算法不仅有好的效率,而且更有广泛的适用范围。

Bresenham\boxed{Bresenham}

误差项d的初值 d0=0d_0=0 e=d0.5=0.5e = d- 0.5 = -0.5

一旦d>=1d >= 1d=d1d=d-1 以保证d<1d<1image-20210402154141909

image-20210402155931771

只需要 e(误差项)的正负,用 $

算法步骤

  1. 输入直线的两端点P0(x0,y0)P_0(x_0,y_0)P1(x1,y1)P_1(x_1,y_1)
  2. 计算初始值 ΔxΔye=Δxx=x0y=y0\Delta x、 \Delta y 、 e=- \Delta x 、 x=x_0 、 y=y_0
  3. 绘制点(x,y)。
  4. e更新为e+2Δye+2 \Delta y,判断e的符号。若e>0,则(x,y)更新为(x+1,y+1),同时将e更新为e2Δxe-2 \Delta x;否则(x,y)更新为(x+1,y)。
  5. 当直线没有画完时,重复步骤3和4.否则结束。

圆弧的扫描转化算法

圆的特征:八对称性。只要扫描八分之一圆弧。

中点画圆法: 考虑中点在原点,半径为R的第二个8分圆。

点圆关系:(圆方程)
F(x,y)=x2+y2R2F(x,y)=x^2 + y^2 -R^2 ,对于圆上的点,F(x,y)=0F(x,y)=0 ;

对于圆外的点,F(x,y)>0F(x,y)>0;对于圆内的点,F(x,y)<0F(x,y)<0
构造判别式:

d=F(M)=F(xp+1,yp0.5)=(xp+1)2+(yp0.5)2R2d = F(M) = F(x_p +1,y_p-0.5) \\ = (x_p+1)^2 + (y_p-0.5)^2-R^2

image-20210402161857952

d<0,取P1P_1 ; d>=0 ,取p2p_2;

多边形

多边形的两种表示方法: 点阵 顶点

顶点 用多边形的顶点序列来表示多边形。这种表示直观、几何意义强、占内存少,但是多边形内的像素点被忽略了,不能用于面着色。

点阵: 用多边形内部的像素集合。不知道边界和顶点。

分类:

  • 凸多边形 :任意两点连线都在多边形内部。
  • 凹多边形: 存在不在多边形内部的两点连线
  • 含内环的多边形: 多边形内还有多边形。

多边形内部上色

X扫描线算法\boxed{X- \text{扫描线算法}} 顶点 -> 点阵

基本思想: 按扫描线的顺序,计算扫描线和多边形相交区间,按指定颜色填充。

共享顶点算几次的问题:

共享顶点的两条边上的另两个端点的y值与共享顶点的ymy_m值作比较,大于ymy_m的点的个数即为算几次。

第五节课

。。。