前言

现在的显示器都是像素点阵。但是图形在计算机中都用连续的线段或多边形等存储。因此在显示出来之前,要进行光栅化处理。

图形的光栅化(图形的扫描转换)分成两步:

1)根据图形的定义 在点阵单元上确定最佳逼近 于图形的像素集;

2)给像素指定合适 的颜色值。

如下图,对于一个三角形进行光栅化:

4.1 画线算法

直线是最基本的图形,一个动画或真实感图形往往需要调用成千上万次画线程序,因此直线算法的好坏与效率将直接影响图形的质量和显示速度。

对于画线算法,要处理的问题如下:

输入:直线两个端点的坐标P0 (x0 ,y0 )和P1 (x1 ,y1 )

输出:最佳逼近这条直线的像素点集

DDA画线算法

在确定像素点位置时可以利用直线方程 y = kx + b , 根据x点的坐标得到y点的坐标,但是这样计算会使用到乘法,若是能将乘法运算转换成加法运算,效率就会提高。数值微分DDA(Digital Differential Analyzer)法引进图形学中一个很重要的思想——增量思想。

假设x0已知,每次沿x轴方向前进一个像素(步长为1),可以计算出相应的y值。因为像素点的坐标为整数,所以还要将计算得到的y值进行取整处理,取整的方法是将其加0.5再取整。如下推论可以得到增量公式,它的含义是当前y值等于前一步的y值加上斜率k,k称为增量。

中点画线算法

中点画线算法不使用直线的斜截式方程,而使用直线的一般式方程F(x, y) = Ax + By + C 。一条直线将平面划分为三个部分:直线上的点、直线上方的点和直线下方的点。中点画线算法每次在x方向上的步长为1,而在y方向上要不要变化需要判断。其中判断方法是取Pu和Pd的中点M,判断M点在Q点的上方还是下方。若M点在Q点的下方,说明Pu点距离直线更近,所以选择Pu点;若M点在Q点的上方,说明Pd点距离直线更近,所以选择Pd点;若M点正好位于Q点处,则选择Pu和Pd都可以。

根据以上算法很容易知道要求的下一个像素点的坐标需要进行一次乘法运算和四次加法运算:di = A(Xi + 1) + B(Yi + 0.5) + C,其效率是很低的,因此这里也引入增量的思想求di。

Bresenham算法

Bresenham算法并不依赖于直线方程,它提供了一个更一般的算法,该算法不仅有好的效率,而且有更广泛的适用范围。该算法的基本思想是通过各行、各列像素中心构造一组虚拟的网格线,按照直线起点到终点的顺序,计算直线与各垂直网格线的交点,然后根据误差项的符号确定该像素中与此交点最近的像素。该算法中增量 d = k ,且当d > 1时就将其减一,以保证算法的连续性。

将Bresenham算法进行一些改进:

经过改进2之后,就只需要用到整数加减法了。

计算机图形学学习笔记(4.1)画线算法相关推荐

  1. 计算机图形学--方法篇(DDA画线算法)

    计算机图形学中所有的绘制算法都是用离散的点尽可能的去逼近理想的图形,本篇为大家介绍常见的几种画线算法. 首先啰嗦一下大家都懂得直线方程,假设有直线: x的增量,y的增量有这样的关系:    或 ​​​ ...

  2. GAMES101-现代计算机图形学学习笔记(作业02)

    GAMES101-现代计算机图形学学习笔记(作业02) Assignment 02 GAMES101-现代计算机图形学学习笔记(作业02) 作业 作业描述 需要补充的函数 思路 结果 原课程视频链接以 ...

  3. 计算机图形学学习笔记——Whitted-Style Ray Tracing(GAMES101作业5讲解)

    计算机图形学学习笔记--Whitted-Style Ray Tracing GAMES101作业5讲解 遍历所有的像素生成光线 光线与平面求交 遍历所有的像素生成光线 关于作业五中如何遍历所有的像素, ...

  4. GAMES101-现代计算机图形学学习笔记(作业07)

    GAMES101-现代计算机图形学学习笔记(作业07) Assignment 07 GAMES101-现代计算机图形学学习笔记(作业07) 作业 作业描述 思路 结果 原课程视频链接以及官网 b站视频 ...

  5. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

    接上文 计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结 在图形学中,有两大基本工具:向量分析,图形变换.本文将重点讲解向量和二维图形的变换. 5. ...

  6. GAMES101-现代计算机图形学学习笔记(作业01)

    GAMES101-现代计算机图形学学习笔记(作业01) Assignment 01 GAMES101-现代计算机图形学学习笔记(作业01) 作业 作业描述 需要补充的函数 思路 结果 原课程视频链接以 ...

  7. 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    接上文 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等 通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维 ...

  8. 计算机图形学 学习笔记(五):多边形裁剪(Suther land-Hodgeman),文字裁剪

    接上文 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky 光栅图形学算法 3.4 多边形裁剪 之前上一篇文章中,我们介绍了直线段的裁 ...

  9. 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky

    接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...

  10. 计算机图形学 学习笔记(九):曲线曲面(一):参数曲线、参数几何代数形式

    接上文 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影) 计算机图形学三大块内容:光栅图形显示(前面已经介绍完了 1-8).几何造型技术.真实感图形显示.光栅图 ...

最新文章

  1. 匿名类型和Object转换
  2. 百分点首席经济学家张忠解读《美国白宫大数据白皮书》
  3. python3.7 6如何安装-深度linux安装Python3.7.6
  4. Mysql升级过程的问题
  5. httpclient爬取性感美图
  6. 关于map的一个习题,忽略大小写和标点符号单词的计数器
  7. ibd文件如何变为json_如何轻松了解 Python 必学的 django 框架?
  8. 面向对象 VS 面向过程
  9. 进击的PM:作为产品总监,你需要具备什么样的能力?
  10. 限制进程使用的内存大小和CPU时间
  11. 冲刺阶段站立会议每天任务1
  12. HDU5479 Colmerauer 单调栈+暴力优化
  13. Javaweb项目 SMBMS 超市订单管理系统:准备工作、登录与注销、修改密码、用户管理
  14. 数据中心到底是如何建设的?
  15. 2019全球IT行业薪酬报告:平均年薪超70万!最高薪职位竟是...
  16. kubernetes CKA题库(附答案、视频)
  17. 用svm预测信用卡诈骗
  18. VIVO NEX3高层预热,差0.4到100%屏占比,这得让多少人心动
  19. 笔记本电脑更换固态硬盘
  20. HCL Nomad 1.0.9中的新功能

热门文章

  1. 生活在深圳我们需要的不是叹息与感概
  2. BI大数据分析是什么,大数据bi工具有哪些
  3. linux查看服务器用户名密码,怎么查看linux服务器的配置?
  4. LeetCode07整数反转(JAVA)
  5. WiFi大师3.0.9独立可运营版
  6. C# NModbus4 TCP 主从站通信样例
  7. javascript caller
  8. TI-C6657开发板烧录步骤
  9. 2020哔哩哔哩校招前端笔试编程题
  10. js获取剪切板文字图片方法